1. 程式人生 > 其它 >【SQL Server】分割槽函式 partition by

【SQL Server】分割槽函式 partition by

group by是分組函式,partition by是分割槽函式,sum()等是聚合函式

函式寫法

over(partition by Course order by Score)

說明:先對Course列中相同的資料進行分割槽,在Course中相同的情況下對Score進行排序

rank()與row_number()與dense_rank()對比

例:查詢每名課程的第一名的成績

1. rank():如果兩個或多個行與一個排名關聯,則每個關聯行將得到相同的排名。例如,有兩位同學具有相同的Score值,則他們將並列排名。由於已有兩行排名在前,所以具有下一個最大Score的同學將排名第三。因此,RANK 函式並不總返回連續整數。

select rank() over(partition by Course order by Score desc), * 
from dbo.UserGrade

2. row_number():返回結果集分割槽內行的序列號,每個分割槽的第一行從 1 開始。ORDER BY 子句可確定在特定分割槽中為行分配唯一 ROW_NUMBER 的順序。

select row_number() over(partition by Course order by Score desc), * 
from dbo.UserGrade

3.dense_rank():如果有兩個或多個行受同一個分割槽中排名的約束,則每個約束行將接收相同的排名。例如,有兩位同學具有相同的Score值,則他們將並列排名。接下來 Score最高的同學排名第二。該排名等於該行之前的所有行數加一。因此,DENSE_RANK 函式返回的數字沒有間斷,並且始終具有連續的排名。整個查詢所用的排序順序確定了各行在結果中的顯示順序。這說明排名第一的行可以不是分割槽中的第一行。

select dense_rank() over(partition by Course order by Score desc), * 
from dbo.UserGrade

原文連結:https://blog.csdn.net/weixin_44547599/article/details/88764558