建立一個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行是一個組,其他的每行是一個組。在第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行是一個組,其他的每行是一個組。在第2行與第3行的組内以c排名,由于c列一個是A,一個是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用于給結果集分組,如果沒有指定那麼它把整個結果集作為一個分組。