窗口函数的其他类型
ntile(z)over(partition by x order by y)
对相同x按照y排序,把y平均分成z份
cume_dist()over(partition by x order by y)
对相同x统计y中最小的值占最大的值的百分比
percent_rank()over(partition by x order by y)
对相同x去掉y的第一个值后,对相同x统计y中最小的值占最大的值的百分比
lag(y,n,'m ')over(partition by x order by y)
n表示一个数字,m表示y字段类型的值
对相同x按照y排序,把y前n个值改成m
lead(y,n,'m ')over(partition by x order by y)
n表示一个数字,m表示y字段类型的值
对相同x按照y排序,把y后n个值改成m
last_value(n)over(partition by x order by y)
n表示字段
取分组内排序后,截止到当前行,最后一个值
first_value(n)over(partition by x order by y)
n表示字段
取分组内排序后,截止到当前行,第一个值
select x,y,count(distinct m),grouping_id from group by x,y,grouping set(x,y)order by group_id;
统计相同x或者y有多少个不同的m
grouping_id表示这一组结果属于哪个分组集合,1表示x,2表示y
group by x,y with cube
对x,y聚合,4种结果 (x,y),(x,null),(null,y),(null,null)
group by x,y with rollup
对x,y聚合,4种结果 (x,y),(x,null),(null,null)