Presto 文档学习之 窗口函数(Window Functions)排名函数(Ranking Functions)

这篇博客介绍了Presto中的窗口函数,特别是排名函数,如row_number、rank和dense_rank等。作者分享了学习过程中的难点和参考资料,强调在学习时应以英文官方文档为主,同时提供了几个中文资源辅助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值