Rank()over()の使い方

2818 ワード

testテーブルを作成し、6つのデータを挿入します.
CREATE TABLE test
(
	a INT,
	b INT,
	c CHAR
)
INSERT INTO test VALUES(1,3,'E')
INSERT INTO test VALUES(2,4,'A')
INSERT INTO test VALUES(3,2,'D')
INSERT INTO test VALUES(3,5,'B')
INSERT INTO test VALUES(4,2,'C')
INSERT INTO test VALUES(2,4,'B')

 
 
SELECT * from test

 
 
a           b           c ----------- ----------- ---- 1           3           E 2           4           A 3           2           D 3           5           B 4           2           C 2           4           B
(6行の影響)
1、結果セット全体がグループ化され、aでランク付けされる
SELECT a,b,c,rank () OVER (ORDER BY a) rank FROM test

 
 
a           b           c    rank ----------- ----------- ---- -------------------- 1           3           E    1 2           4           A    2 2           4           B    2 3           2           D    4 3           5           B    4 4           2           C    6
(6行の影響)
2、結果セット全体がグループ化され、bでランク付けされる
SELECT a,b,c,rank () OVER (ORDER BY b) rank FROM test

 
 
a           b           c    rank ----------- ----------- ---- -------------------- 3           2           D    1 4           2           C    1 1           3           E    3 2           4           A    4 2           4           B    4 3           5           B    6
(6行の影響)
3、a,bでグループ化し、各グループ内でbでランク付けする.5つのグループに分けられ、2行目と3行目は1つのグループで、他の行は1つのグループです.2行目と3行目のグループ内でb順位で1に並ぶ
SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY b) rank FROM test

 
a           b           c    rank ----------- ----------- ---- -------------------- 1           3           E    1 2           4           A    1 2           4           B    1 3           2           D    1 3           5           B    1 4           2           C    1
(6行の影響)
4、a,bでグループ化し、各グループ内でcでランキングする.5つのグループに分けられ、2行目と3行目は1つのグループで、他の行は1つのグループです.2行目と3行目のグループ内ではcでランク付けされているが,c列は1つがA,1つがBであるため,Rankはそれぞれ1,2である.
SELECT a,b,c,rank () OVER (PARTITION BY a,b ORDER BY c) rank FROM test

 
 
a           b           c    rank ----------- ----------- ---- -------------------- 1           3           E    1 2           4           A    1 2           4           B    2 3           2           D    1 3           5           B    1 4           2           C    1
(6行の影響)
まとめ:1、partition byは結果セットをグループ化するために使用され、指定されていない場合は結果セット全体をグループ化します.