db2 ROW_NUMBER() 用法

其它資料:http://jingyan.baidu.com/article/9989c74604a644f648ecfef3.html html

這個也不錯oracle

----------------------------------------------------------------------------------------------測試

db2的row_number()over() 等於oracle的row_number()over() 
spa


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



rank()over()  是排名不連續  也就是 數據有多是 : 1,1,3,3,5,6,7 這樣的。orm



下面是一個例子:htm

測試表/數據
 
 
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 排名不連續 get

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行。


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

按組排序,獲取組的首記錄

select * from (

SELECT

  ROW_NUMBER() OVER(partition by test_course.student_name order by test_course.student_name DESC) AS NO,

test_course.*

 FROM

  test_course

 ORDER BY

student_name DESC

) a 

--where a.no=1

 ;

相關文章
相關標籤/搜索