ROW_NUMBER,RANK,DENSE_RANK区别

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
       ROW_NUMBER() 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
          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行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值