您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“分組求排名rank,row_number,dense_rank的區(qū)別是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
相信好多使用Mysql的用戶一定對(duì)分組求排名的需求感到發(fā)怵.
但是在hive或者oracle來說就能簡單實(shí)現(xiàn).
采用窗口函數(shù):rank() over() / row_number() over() / dense_rank() over()函數(shù)就能輕松完成.
我們可以理解為我們先把需要分析的字段select出來,然后通過窗口函數(shù)進(jìn)行分析.
所以窗口函數(shù)產(chǎn)生的結(jié)果一定是一對(duì)一的,即便在窗口中使用分組操作產(chǎn)生相同的值也每行數(shù)據(jù)都有.
select user_id,user_type,sales, --窗口函數(shù)的分析字段 RANK() over (partition by user_type order by sales desc) as rank, ROW_NUMBER() over (partition by user_type order by sales desc) as row_number, DENSE_RANK() over (partition by user_type order by sales desc) as dense_rankfrom order_detail;
根據(jù)窗口函數(shù)的理解,我們來看上述例子
要分析的字段有 user_type,sales,執(zhí)行過程對(duì)這些字段select出來(可能select不太準(zhǔn)確,但是要先取得這些要用于分析的字段)
使用窗口函數(shù)進(jìn)行分析 over() 是窗口函數(shù),over()里面一般要寫partition by 和 order by來對(duì)分析的數(shù)據(jù)進(jìn)行分組和排序
over() 函數(shù)前邊要定義分析策略,比如 rank(), row_number(),dense_rank()都是不同的分析策略.
user_id | user_type | sales | rank | row_number | dense_rank |
---|---|---|---|---|---|
wutong | new | 6 | 1 | 1 | 1 |
qishili | new | 5 | 2 | 2 | 2 |
lilisi | new | 5 | 2 | 3 | 2 |
wanger | new | 3 | 4 | 4 | 3 |
zhangsa | new | 2 | 5 | 5 | 4 |
qibaqiu | new | 1 | 6 | 6 | 5 |
liiu | new | 1 | 6 | 7 | 5 |
liwei | old | 3 | 1 | 1 | 1 |
wangshi | old | 2 | 2 | 2 | 2 |
lisi | old | 1 | 3 | 3 | 3 |
如上述表格,rank() / row_number() / dense_rank() 都是進(jìn)行排名.
rank()在處理相同排名的時(shí)候根據(jù)同排名數(shù)據(jù)數(shù)量進(jìn)行順延排名
dense_rank()在處理相同排名的時(shí)候不會(huì)順延排名
row_number()如函數(shù)名,就是單單是排名后的行數(shù)
SELECT rank() OVER (ORDER BY sum(b))FROM tableGROUP BY a;
上面等于于
SELECT sum_b rank() OVER (ORDER BY sum_b)FROM( SELECT SUM(b) AS sum_b FROM table GROUP BY a ) t;
“分組求排名rank,row_number,dense_rank的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。