row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别
生活随笔
收集整理的這篇文章主要介紹了
row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求描述:分析最近三個月每天排名前30的郵箱收件數量。
涉及到的表字段:發件時間,收件人。
一、ROW_NUMBER
表t查詢出了3月每天不同類型郵箱收件量的降序排名,表t1通過ROW_NUMBER函數給每行數據添加序列號,select ROW_NUMBER() over(partition by t.send_dt order by t.num desc) as row_num,在表t1的基礎上查詢row_num<=30且order by t1.send_dt,t1.num desc。結果如下:
明顯不是想要的結果,ROW_NUMBER()從1開始,按照順序,生成分組內記錄的序列,如果分組內排名相同會順序標記,那么問題來了,在嵌套查詢1個月內每天TOP30的量時ORDER BY 中不能有序列字段就會出現以上亂序問題。
二、RANK
通過RANK()函數統計的結果如下:
結果可以看出,RANK() 生成數據項在分組中的排名,排名相等會在名次中留下空位。
三、DENSE_RANK
通過DENSE_RANK()函數查詢結果如下:
從結果可以看出,DENSE_RANK() 生成數據項在分組中的排名,排名相等會在名次中不會留下空位,以上需求中選擇使用DENSE_RANK。
不妥之處希望得到指正,謝謝!
總結
以上是生活随笔為你收集整理的row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冰凉贴贴在哪里最凉快
- 下一篇: python中getrandbits函数