天天看點

Sql Rank() over()的用法

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

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

轉自:http://www.cnblogs.com/mycoding/archive/2010/05/29/1747065.html