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很明顯會返回三條記錄;
故使用這三個函數的時候要看清需求