功能:既能显示聚合前的数据 ,又能显示聚合后的函数
执行顺序:最后一步执行 ,仅仅位于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

本文介绍了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框架', '验证框架']
317

被折叠的 条评论
为什么被折叠?



