SQL2005資料庫引擎引入了稱為排名函式的一類新函式。構成該類的函式有:
●RANK
●DENSE_RANK
●NTILE
●ROW_NUMBER
這些函式返回分割槽中每行的排名值。
工具/原料
SQL2005,或更高版本(這裡使用SQL2012)
ROW_NUMBER()
這個比較有用,類似獲得一個自增長列。
返回結果集分割槽內行的序列號,每個分割槽的第一行從 1 開始。
rounumber1按考試型別排序,為每條資料添加了序列號。
rownumber2按考試型別分割槽(使用 PARTITION BY 引數),然後按姓名排序新增序列號,分割槽內的序列號是相互獨立的。
RANK()
返回結果集的分割槽內每行的排名。行的排名是相關行之前的排名數加一。
意味著這有並列排名。
下面資料中存在並列名次3,就直接跳過4了。
DENSE_RANK
返回結果集分割槽中行的排名,在排名中沒有任何間斷。行的排名等於所討論行之前的所有排名數加一。
可以理解為與RANK函式類似,但是但相同排名後的序號是連貫的。所謂的密集系列。
DENSE_RANK()與RANK()的區別在於排名的連續性。
DENSE_RANK的排名始終是連貫的;RANK的排名出現重複排名後就不連貫了。
NTILE
將有序分割槽中的行分發到指定數目的組中。各個組有編號,編號從一開始。對於每一個行,NTILE 將返回此行所屬的組的編號。
可以簡單的理解為這個函式是用來為資料分組的。
分組規則
總行數/組數,如果除不盡,將多餘的資料根據排序分配到前面的幾個組中。
示例如下:
感謝閱讀
感謝你把本經驗閱讀完,如果有寫的不好的地方,請指出以便糾正,以免誤人子弟。
如果覺得本經驗有用,浪費你幾秒鐘的時間在頁面左下方點個贊。在頁面頂部/經驗底部投個票。