hive窗口函数------- over()

5 篇文章 0 订阅
本文介绍了Hive的窗口函数over(),它在SQL查询中用于实现聚合功能,同时保持原始数据的可见性。over()函数可以与partition by和order by结合使用,其中partition by用于分组,order by指定排序。文章还提到了rows between...and...的用法,以及ntile(), row_number(), rank(), dense_rank()等序列函数,以及lag()和lead()等其他窗口函数的应用。" 125127876,11325605,Java Web参数校验实践:JSR303与Hibernate Validator,"['后端开发', 'Java', 'Spring框架', '验证框架']
摘要由CSDN通过智能技术生成

功能:既能显示聚合前的数据 ,又能显示聚合后的函数

执行顺序:最后一步执行 ,仅仅位于order by 之前

                  select查询中 存在多个窗口函数时 他们之间是没有影响的,每个窗口应用自己规则

函数内容:

     over():

partition by :分组(在分组内进行操作)。

order by :默认从起点行到当前行。

eg:

select DISTINCT appkey,amount, count(1)over(partition by appkey order by amount ) from xxx

window :rows between ... and ...

              preceding ---往前

              following -----往后

              current row --当前行

              unbounded---起点

主要序列函数不支持window子句:

ntile(n):将分组数据按照顺序分成n片,返回当前切片值

假如我们想要每位顾客购买金额前1/3的交易记录:

select name,orderdate,cost,

ntile(3) over() as sample1 , --全局数据切片

ntile(3) over(partition by name), -- 按照name进行分组,在分组内将数据切成3份

ntile(3) over(order by cost),--全局按照cost升序排列,数据切成3份

ntile(3) over(partition by name order by cost ) --按照name分组,在分组内按照 cost升序排列,数据切成3份

from t_window

 

row_number,rank,dense_rank:

- row_number()从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列

- RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位

- DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位

 

lag:返回上行的数据

lead:返回下行的数据

 

first_valve:

last_value

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值