Rank()over()の使い方
2818 ワード
testテーブルを作成し、6つのデータを挿入します.
a b c ----------- ----------- ---- 1 3 E 2 4 A 3 2 D 3 5 B 4 2 C 2 4 B
(6行の影響)
1、結果セット全体がグループ化され、aでランク付けされる
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でランク付けされる
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に並ぶ
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である.
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は結果セットをグループ化するために使用され、指定されていない場合は結果セット全体をグループ化します.
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は結果セットをグループ化するために使用され、指定されていない場合は結果セット全体をグループ化します.