1. 程式人生 > >[MYSQL]Rank() over()的用法

[MYSQL]Rank() over()的用法

from : https://www.cnblogs.com/mycoding/archive/2010/05/29/1747065.html

 

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

2、Rank 是在每個分組內部進行排名的。

Technorati 標籤: rank over,partition,sql