【SQL】排序函數

1. ROW_NUMBER()
排序值相同時序號不同,依次排序且不會重複,注意使用row_number函數時必須要用over子句選擇對某一列進行排序才能生成序號。

其基本原理是先使用over子句中的排序語句對記錄進行排序,然後按照這個順序生成序號。
over子句中的order by子句與SQL語句中的order by子句沒有任何關係,這兩處的order by 可以完全不同

2. RANK()
rank函數用於分區內的排名,排序值相同時序號一樣,但爲跳躍排序(比如兩個第一名後面是第三名)

3. DENSE_RANK()
類似RANK(), 排序值相同時序號一樣,但爲連續排序(比如兩個第一名後面是第二名)

4. NTILE(n)
n: 代表分多少組,是自動進行分組 (每組的記錄數不能大於它上一組的記錄數)

一個圖表示幾個函數的區別:

 

總結:
在使用排名函數的時候需要注意:
  1、排名函數必須有包含 ORDER BY 的 OVER 子句。
  2、分組內從1開始排序。

常用語法格式:

1. ROW_NUMBER OVER(partition by … order by … desc):無並列,相同名次順序排列
2. RANK OVER(partition by … order by … desc):有並列,跳躍排序,有兩個第二名時後邊跟着的是第四名
3. DENSE_RANK OVER(partition by … order by … desc):有並列,連續排序,有兩個第二名時仍然跟着第三名
4. NTITLE(組數) OVER(partition by … order by … desc)

 

參考:https://www.cnblogs.com/52XF/p/4209211.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章