先前在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.其他待補充