其它資料: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
;