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()

每个学科按照分数倒序排名

select stu_id,stu_name,course,score,rank() over(partition by course order by score desc) rank

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的更多相关文章

  1. [转]oracle分析函数Rank, Dense_rank, row_number

    oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number)   目录 ==================== ...

  2. oracle分析函数Rank, Dense_rank, row_number

    http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录=============================== ...

  3. Oracle分析函数 — rank, dense_rank, row_number用法

    本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course   nva ...

  4. rank,dense_rank,row_number使用和区别

    rank,dense_rank,row_number区别 一:语法(用法):     rank() over([partition by col1] order by col2)      dense ...

  5. 【DB2】DB2中rank(),dense_rank(),row_number()的用法

    1.准备测试数据 DROP TABLE oliver_1; ),SUB_NO ),SCORE int); ,,); ,,); ,,); ,,); ,,); ,,); 2.详解rank(),dense_ ...

  6. oracle sql rank dense_rank row_number fisrt last

    測試表emp

  7. oracle的开窗函数

    原创 select * from (select province, commodity, sum(price), ROW_NUMBER() OVER(PARTITION BY province  o ...

  8. [z]一个SQL语句分清楚RANK(),DENSE_RANK(),ROW_NUMBER()三个排序的不同

    转自:http://blog.csdn.net/s630730701/article/details/51902762 在SCOTT用户下,执行下面SQL; SELECT s.deptno,s.ena ...

  9. 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 ...

随机推荐

  1. Oracle数据安全解决方案(1)——透明数据加密TDE

    Oracle数据安全解决方案(1)——透明数据加密TDE2009年09月23日 22:49:00 华仔爱技术 阅读数:7991原文地址: http://www.oracle.com/technolog ...

  2. 一丶HTML介绍

    import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('local ...

  3. TypeError: can only concatenate str (not "int") to str解决方式

    使用format函数解决问题 for page in range(1,pagebox+1): url = "https://www.dd373.com/s/rbg22w-x9kjbs-wwf ...

  4. 通过GIT_COMMIT进行代码回滚

    首先需要安装插件:conditional-buildstep A buildstep wrapping any number of other buildsteps, controlling thei ...

  5. Java遍历Map对象的四种方式

    关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 :这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer, Integer> m ...

  6. log4j配置,输出sql到控制台

    网上的 # Global logging configuration log4j.rootLogger=ERROR, stdout # log4j.logger后面跟着的是项目dao包路径,里面全部都 ...

  7. scrapy+mongodb

    我们都知道scrapy适合爬取大量的网站信息,爬取到的信息储存到数据库显然需要更高的效率,scrapy配合mongodb是非常合适的,这里记录一下如何在scrapy中配置mongodb. 文件结构 $ ...

  8. ansible字符串处理(一)

    [root@node-1 test]# ansible-playbook hba_card_check.yml PLAY [compute[0]] ************************** ...

  9. Net Core Docker 容器部署,修改,保存

    运行镜像 [root@localhost opt]# docker run -itd -p : microsoft/dotnet:latest 查看运行的docker [root@localhost ...

  10. lxml库

    lxml库 lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML数据. 基本使用: 1.我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码 ...