partition by關鍵字是分析性函數的一部分,它和聚合函數(如group by)不同的地方在於它能返回一個分組中的多條記錄,而聚合函數一般只有一條反映統計值的記錄,
partition by用於給結果集分組,如果沒有指定那么它把整個結果集作為一個分組。
partition by 與group by不同之處在於前者返回的是分組里的每一條數據,並且可以對分組數據進行排序操作。后者只能返回聚合之后的組的數據統計值的記錄。
Demo
數據庫表結構 學生成績表 UserGrade
Id int Checked 主鍵Id
Name varchar(50) Checked 學生名
Course varchar(50) Checked 課程名
Score int Checked 分數
01、把每個人學生的成績按照升序排名 (思路:根據學生姓名分組 根據每個人成績排序)
sql語句
select *,ROW_NUMBER() over( partition by Name order by Score )排名
from UserGrade
查詢結果
Id Name Course Score 排名
1004 李四 數學 60 1
1005 李四 語文 80 2
1001 李四 英語 100 3
1007 王五 數學 30 1
1006 王五 語文 50 2
1003 王五 英語 50 3
1008 張三 英語 60 1
1000 張三 語文 80 2
1002 張三 數學 90 3
02、把每個學科的成績分別進行排名 (思路:根據學科分組 根據成績排序)
sql語句
select *,ROW_NUMBER() over( partition by Course order by Score )排名
from UserGrade
查詢結果
Id Name Course Score 排名
1002 張三 數學 90 1
1004 李四 數學 60 2
1007 王五 數學 30 3
1001 李四 英語 100 1
1008 張三 英語 60 2
1003 王五 英語 50 3
1000 張三 語文 80 1
1005 李四 語文 80 2
1006 王五 語文 50 3