Presto 文档学习之 窗口函数(Window Functions)排名函数(Ranking Functions)
Hello!大家好,本人菜鳥一枚,最近在領導的要求下學習Prestodb,沒辦法只能打開官方文檔來自我學習,對于英語渣的我來說無疑是痛苦的,看到的頁面和天書一樣
谷歌翻譯過來的吧 很多句子看不懂想要具體表達的意思
對于會SQL Server 和Oracle 數據庫用過窗口函數的大神來說可以很容易的理解prestodb 中窗口函數的用法,因為幾乎是一樣的,但是只會mysql的我 只能四處翻資料學習,只看官方文檔是不可能學會的。
聲明:本文旨作為自己學習過程的筆記,以及給新手學習提供一些幫助,大神不喜勿噴,謝謝!
Proesto 官網文檔地址:https://prestodb.io/docs/current/functions/window.html
(PS:學習的時候建議使用英文文檔,可以參考中文文檔,具體應以英文官方文檔為準)
1、over (分析函數) 開窗函數over(),將聚合函數變成窗口函數來計算
包含三個分析子句: 分組(partition by),?
排序(order by),
窗口(rows)
????????order by 對結果集排序
having 篩選分組后數據。
子句: range unbounded preceding?
range between unbounded and preceding and current row 的意思是從開始到當前行的記錄
range between unbounded preceding and unbouned following 的意思針對當前所有記錄的前一條、后一條記錄,也就是表中的所有記錄。
rows between 1 preceding and current row 是指當前行的上一行(rownum-1)到當前行的匯總?
--unbounded:不受控制的,無限的
--preceding:在...之前
--following:在...之后
詳細可閱讀:
http://www.blogjava.net/pengpenglin/archive/2008/06/25/210536.html
http://blog.csdn.net/cnham/article/details/6101199
2、排名函數:
ntile ????????????分組/分桶函數
分組依據:
1、 每組的記錄數不能大于它上一組的記錄數,即編號小的桶放的記錄數不能小于編號大的桶。
也就是說,第1組中的記錄數只能大于等于第2組及以后各組中的記錄數。
2、 所有組中的記錄數要么都相同,要么從某一個記錄較少的組(命名為X)開始后面所有組的記 錄數都與該組(X組)的記錄數相同。
每個組分得的記錄條數依據:如果平均分則平均分,如果不平均,則第一組所分配的記錄數為? ?(總條數 / 總組數)+1;剩下條數可均分則均分,如果不平均,則繼續第一組分配規則
row_number 會為查詢出來的每一行記錄生成一個序號,依次排序且不會重復 從1開始
rank 與row_number 用法一致,但是考慮重復情況,如果字段值相同,則返回序號相同,下一條記錄需要則需順延一位,即跳躍排序,有兩個第一名時接下來就是第三名
dence_rank 與rank用法一致,rank() 為跳躍排序,dence_rank() 為連續排序,即有兩個第一名時接下來就是第二名
cume_dist 計算某個值在該組中的累積分布,即這個的值在改組中的相對位置返回的值范圍大于0并且小于或等于1
計算方法:小于等于該行值的行數 / 總行數? (rank() 返回值就是小于等于該行值的行數)
precent_rank 用法與cume_dist類似,計算的為該行值在改組中的百分比位置
計算方法:小于等于該行值的行數 -1 / 總行數 -1
詳細可閱讀:
https://www.cnblogs.com/52XF/p/4209211.html
http://blog.csdn.net/leewhoee/article/details/20264609
總結
以上是生活随笔為你收集整理的Presto 文档学习之 窗口函数(Window Functions)排名函数(Ranking Functions)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个真实而又令人震撼的故事
- 下一篇: oracle委外加工工单,外协管理Ora