oracle的number对应db2,db2的row-number()over() 等于oracle的row-number()over() 还是等于oracl...

本文通过创建测试表并插入数据,详细解释了在db2和oracle中,ROW_NUMBER()、RANK()以及DENSE_RANK()三个窗口函数的区别。ROW_NUMBER()按顺序编号,RANK()在数值相同时排名不连续,而DENSE_RANK()则保持排名连续。示例展示了这三个函数在对学生成绩进行排序时的不同效果。
摘要由CSDN通过智能技术生成

db2的row_number()over() 等于oracle的row_number()over()

也就是顺序排列, 1,2,3,4,5,6,7

rank()over()  是排名不连续  也就是 数据有可能是 : 1,1,3,3,5,6,7 这样的.

下面是一个例子:测试表/数据

CREATE TABLE test_course (

student_name  VARCHAR(10),  -- 学生

course_name   VARCHAR(10),  -- 课程

grade         INT           -- 成绩

);

INSERT INTO test_course VALUES('甲', '语文', 95);

INSERT INTO test_course VALUES('乙', '语文', 85);

INSERT INTO test_course VALUES('丙', '语文', 75);

INSERT INTO test_course VALUES('丁', '语文', 65);

INSERT INTO test_course VALUES('戊', '语文', 55);

INSERT INTO test_course VALUES('己', '语文', 50);

INSERT INTO test_course VALUES('庚', '语文', 60);

INSERT INTO test_course VALUES('辛', '语文', 70);

INSERT INTO test_course VALUES('壬', '语文', 80);

INSERT INTO test_course VALUES('奎', '语文', 90);

INSERT INTO test_course VALUES('甲', '数学', 90);

INSERT INTO test_course VALUES('乙', '数学', 80);

INSERT INTO test_course VALUES('丙', '数学', 70);

INSERT INTO test_course VALUES('丁', '数学', 60);

INSERT INTO test_course VALUES('戊', '数学', 50);

INSERT INTO test_course VALUES('己', '数学', 50);

INSERT INTO test_course VALUES('庚', '数学', 60);

INSERT INTO test_course VALUES('辛', '数学', 70);

INSERT INTO test_course VALUES('壬', '数学', 85);

INSERT INTO test_course VALUES('奎', '数学', 95);

ROW_NUMBER 顺序编号 SQL> SELECT

2    ROW_NUMBER() OVER( ORDER BY SUM(grade) DESC) AS NO,

3    student_name,

4    SUM(grade) AS AllGrade

5  FROM

6    test_course

7  GROUP BY

8    student_name

9  ORDER BY

10    SUM(grade) DESC

11  ;

NO STUDENT_NA   ALLGRADE

---------- ---------- ----------

1 奎                185

2 甲                185

3 乙                165

4 壬                165

5 丙                145

6 辛                140

7 丁                125

8 庚                120

9 戊                105

10 己                100

已选择10行.

RANK 排名不连续 SELECT

RANK() OVER( ORDER BY SUM(grade) DESC) AS NO,

student_name,

SUM(grade) AS AllGrade

FROM

test_course

GROUP BY

student_name

ORDER BY

SUM(grade) DESC

NO STUDENT_NA   ALLGRADE

---------- ---------- ----------

1 奎                185

1 甲                185

3 乙                165

3 壬                165

5 丙                145

6 辛                140

7 丁                125

8 庚                120

9 戊                105

10 己                100

已选择10行.

还有一个  DENSE_RANK 排名连续 SELECT

DENSE_RANK() OVER( ORDER BY SUM(grade) DESC) AS NO,

student_name,

SUM(grade) AS AllGrade

FROM

test_course

GROUP BY

student_name

ORDER BY

SUM(grade) DESC

NO STUDENT_NA   ALLGRADE

---------- ---------- ----------

1 奎                185

1 甲                185

2 乙                165

2 壬                165

3 丙                145

4 辛                140

5 丁                125

6 庚                120

7 戊                105

8 己                100

已选择10行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值