天天看點

rank() over 的用法

建立一個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用于給結果集分組,如果沒有指定那麼它把整個結果集作為一個分組。