Oracle 的开窗函数 rank,dense_rank,row_number
1、开窗函数和分组函数的区别
分组函数是指按照某列或者某些列分组后进行某种计算,比如计数,求和等聚合函数进行计算。
开窗函数是指基于某列或某些列让数据有序,数据行数和原始数据数相同,依然能曾现个体数据的原貌。
事例数据
create table student_scores(
stu_id varchar2(10),--学号
stu_name varchar2(20),--姓名
course varchar2(5),--课程
score number(5,2),--分数
constraint pk_stuid_course primary key (stu_id,course)
);
insert into student_scores(stu_id,stu_name,course,score) values('10001','周杰伦','语文','85');
insert into student_scores(stu_id,stu_name,course,score) values('10001','周杰伦','数学','96');
insert into student_scores(stu_id,stu_name,course,score) values('10001','周杰伦','英语','67');
insert into student_scores(stu_id,stu_name,course,score) values('10002','谢霆锋','语文','71');
insert into student_scores(stu_id,stu_name,course,score) values('10002','谢霆锋','数学','97');
insert into student_scores(stu_id,stu_name,course,score) values('10002','谢霆锋','英语','100');
insert into student_scores(stu_id,stu_name,course,score) values('10003','苏有朋','语文','79');
insert into student_scores(stu_id,stu_name,course,score) values('10003','苏有朋','数学','65');
insert into student_scores(stu_id,stu_name,course,score) values('10003','苏有朋','英语','80');
insert into student_scores(stu_id,stu_name,course,score) values('10004','刘德华','语文','41');
insert into student_scores(stu_id,stu_name,course,score) values('10004','刘德华','数学','61');
insert into student_scores(stu_id,stu_name,course,score) values('10004','刘德华','英语','62');
insert into student_scores(stu_id,stu_name,course,score) values('10005','小龙女','语文','94');
insert into student_scores(stu_id,stu_name,course,score) values('10005','小龙女','数学','95');
insert into student_scores(stu_id,stu_name,course,score) values('10005','小龙女','英语','96');
2、分组函数:group by
按照课程进行分组,可以进行如下计算
select course,count(*) cou,avg(score) avgs,max(score) maxs,min(score) mins
from student_scores
group by course;
|
COURSE |
COU |
AVGS |
MAXS |
MINS |
|
|
1 |
数学 |
5 |
82.8 |
97 |
61 |
|
2 |
语文 |
5 |
74 |
94 |
41 |
|
3 |
英语 |
5 |
81 |
100 |
62 |
3、开窗函数:rank() ,dense_rank(),row_number()
每个学科按照分数倒序排名
from student_scores;
|
STU_ID |
STU_NAME |
COURSE |
SCORE |
RANK |
|
|
1 |
10002 |
谢霆锋 |
数学 |
97.00 |
1 |
|
2 |
10001 |
周杰伦 |
数学 |
96.00 |
2 |
|
3 |
10005 |
小龙女 |
数学 |
95.00 |
3 |
|
4 |
10003 |
苏有朋 |
数学 |
65.00 |
4 |
|
5 |
10004 |
刘德华 |
数学 |
61.00 |
5 |
|
6 |
10002 |
谢霆锋 |
英语 |
100.00 |
1 |
|
7 |
10005 |
小龙女 |
英语 |
96.00 |
2 |
|
8 |
10003 |
苏有朋 |
英语 |
80.00 |
3 |
|
9 |
10001 |
周杰伦 |
英语 |
67.00 |
4 |
|
10 |
10004 |
刘德华 |
英语 |
62.00 |
5 |
|
11 |
10005 |
小龙女 |
语文 |
94.00 |
1 |
|
12 |
10001 |
周杰伦 |
语文 |
85.00 |
2 |
|
13 |
10003 |
苏有朋 |
语文 |
79.00 |
3 |
|
14 |
10002 |
谢霆锋 |
语文 |
71.00 |
4 |
|
15 |
10004 |
刘德华 |
语文 |
41.00 |
5 |
注意分组函数和开窗函数针对数据在维度上的变化,分组函数使个体数据小时。开窗函数保留个体。
Oracle 的开窗函数 rank,dense_rank,row_number的更多相关文章
- [转]oracle分析函数Rank, Dense_rank, row_number
oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number) 目录 ==================== ...
- oracle分析函数Rank, Dense_rank, row_number
http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录=============================== ...
- Oracle分析函数 — rank, dense_rank, row_number用法
本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course nva ...
- rank,dense_rank,row_number使用和区别
rank,dense_rank,row_number区别 一:语法(用法): rank() over([partition by col1] order by col2) dense ...
- 【DB2】DB2中rank(),dense_rank(),row_number()的用法
1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...
- oracle sql rank dense_rank row_number fisrt last
測試表emp
- oracle的开窗函数
原创 select * from (select province, commodity, sum(price), ROW_NUMBER() OVER(PARTITION BY province o ...
- [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同
转自:http://blog.csdn.net/s630730701/article/details/51902762 在SCOTT用户下,执行下面SQL; SELECT s.deptno,s.ena ...
- rank() | dense_rank() | row_number() over(PARTITION BY sex order by age desc ) 的区别
1.row_num() over()函数:根据某个字段排序后编号1,2,3.. select *,ROW_NUMBER() over ( order by majorid) as numfrom St ...
随机推荐
- 微信小程序开发学习(一)
一.各种JSON配置 1.小程序配置app.json 为小程序全局配置,包括所有页面路径.界面表现.网络超时时间.底部tab等,类比APP开发中manifest配置. 2.工具配置project.co ...
- [MySQL]如何支持utf8格式的UCS4unicode字符
filed中必须是CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci: 连接时必须set names "utf8mb4": 这是一段P ...
- 手动安装sublime text3 文本编辑器是控制台
1 本来想安装一个体积小.功能又强大的文本编辑器,百度了一圈sublime text3 的口碑不错,然后就安装试试吧, 下了以后安装成功后,看到介绍sublime text3功能强大是因为他可以安装多 ...
- Python——类与对象,异常处理
类 class C1: def setdata(self,value): self.data = value def display(self): print(self.data) class C2( ...
- VUE中/deep/深度作用域
vue中css样式不起作用,用!important也不起作用,此时需要用 /deep/ ,没加之前是 加了之后起作用了,此时这个deep是深度作用域
- 使用Set集合对List集合进行去重
/** * 使用Set集合对List集合进行去重 **/ public class SetTest { /** * List集合的泛型为Integer类型 * * @author hongwei.li ...
- java中枚举起别名
public enum Gender { MALE("男"),FELMALE("女"); private final String cValue; privat ...
- 分支界定( BRANCH-AND-BOUND)
分支定界法(branch and bound)是一种求解整数规划问题的最常用算法.这种方法不但可以求解纯整数规划,还可以求解混合整数规划问题.分支定界法是一种搜索与迭代的方法,选择不同的分支变量和子问 ...
- 强制.net 程序以32位模式运行
You can modify the PE header of the executable (using the "Corflags.exe" .NET Framework SD ...
- Invitation Cards POJ - 1511 (双向单源最短路)
In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...