SQL Server排名或排序的函數


SQL Server獲得排名或排序的函數有例如以下幾種:
1、Rank:在結果集中每一條記錄所在的排名位置,但排名可能不連續,比如:若同一組內有兩個第一名,則該組內下一個名次直接跳至第三名
 select *,Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory 



2、Dense_Rank:功能與Rank相似。但排名的數值是連續的,比如:若同一組內有兩個第一名,則該組內下一個名次為第二名
select *,dense_Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory 


3、Row_Number:依據組顯示每一條記錄在該組中出現的位置,比如:若有兩個第一名。則這兩個第一名在一組內排名為1、2,下一組的排序仍從1開始,依次類推
select *,row_number() over (partition by productid  order by productid ) as Rank from Production.ProductInventory 


4、NTILE:依據指定的分組數量將結果集分區,並記錄其在組中的位置。

能夠對結果集的數據排序后。依照指定的數量把結果集分成N組,並給予每組一個組編號,分組的方式非常easy,將結果集的總記錄數除以N,若有余數M,則前M組都多增一條記錄,因此,並不是全部的組都有同樣的記錄數。但多記錄的組最多僅僅有一條記錄。

select top 13 *,NTILE(2) over (partition by productid  order by locationid ) as Rank from Production.ProductInventory 

以上SQL語句均在SQL Server 2008下調試通過。使用AdventureWorks

上述四個函數語法格式同樣,都要搭配OVER子句,並且要以指定切分或排序記錄的方式,OVER子句定議格式例如以下:
Over(【Partition BY <提供數值的描寫敘述方式>】 ORDER BY <字段> [DES|ASC])
Partition BY 子句決定排名記錄的分組方式,而Order By 子句決定每一組記錄要怎樣排序,假設省略了Partition by 子句,則所有記錄為一組




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM