1. 程式人生 > >sqlserver:rank() over()函式

sqlserver:rank() over()函式

sqlserver:rank() over()函式

先前在oracle資料庫中接觸過over()函式的一系列使用,但是在實際的sql開發中並沒有太多的使用,這次在sqlserver的sql拼寫中重新遇到這個函式,故結合網上的例子和專案中實際中使用,將其簡單用法記錄一下,以增強記憶和幫助後來者。

言歸正傳:

資料庫:sqlServer2008R2 英文版

--1.準備資料:

CREATE TABLE TEST_OVER_01
(
    a INT,
    b INT,
    c CHAR
)
INSERT INTO TEST_OVER_01 VALUES(1,3,'E')
INSERT INTO TEST_OVER_01 VALUES(2,4,'A')
INSERT INTO TEST_OVER_01 VALUES(3,2,'D')
INSERT INTO TEST_OVER_01 VALUES(3,5,'B')
INSERT INTO TEST_OVER_01 VALUES(4,2,'C')
INSERT INTO TEST_OVER_01 VALUES(2,4,'B')
INSERT INTO TEST_OVER_01 VALUES(4,5,'F')
INSERT INTO TEST_OVER_01 VALUES(4,6,'G')

--2.測試查詢:

----查詢所有

select * from TEST_OVER_01 ;

 

----整個結果集是個分組,以b進行排名

select a , b, c , RANK() over(order by b) rank1 from TEST_OVER_01 ;

 

----整個結果集進行分組,以a進行排名

select a, b, c, RANK() over(order by a) rank2 from TEST_OVER_01 ;

 

----以a,b 進行分組,在每個小組內以b進行排名。

select a, b ,c ,RANK() over(partition by a,b order by b) rank3 from TEST_OVER_01;

 

--3.相關總結:

rank() over(partition by 列1,列2等 order by 列xx )

partition by -- 用於給結果集分組,如果沒有指定,則是對整個結果集作為一個分組

rank() -- 用於在分組內部進行排序。需要注意的是,ran()是跳躍排序,即:如果有兩個第1名,則接下來就是第3,忽略第2的情況。

 

--4.其他待補充

 

願無歲月可回首 且以深情共白頭