關於函數row_number,rank,dense_rank排序

eg:返回排名前三的用戶

select no,

          sal,

          row_number() over(partition by mo order by sal desc) as row_number,

          rank() over(partition by mo order by sal desc) as rank,

          dense_rank() over(partition by mo order by sal desc) as dense_rank

from tabname

where cid=(1,2)

order by 1,2 desc;

返回的值:

  sal    row_number   rank   dense_rank

3000          1                1               1

3000          2                1               1

2000          3                3               2

通過結果可以觀察出返回值的差別

row_number會生成序號1,2,3

rank相同的sal會產生相同的序號,而後的會是3

dense_rank相同的sal產生相同的序號,其後遞增

這裏如果取第一的用戶,row_number()會漏掉,如果去前二的用戶,dense_rank很明顯會返回三條記錄;

故使用這三個函數的時候要看清需求


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