常用窗口函数总结

本文介绍了SQL中的窗口函数,包括如何使用OVER()配合PARTITIONBY、ORDERBY和ROWSBETWEEN进行聚合和排序计算。提到了如row_number(),rank(),dense_rank(),lag(),lead(),first_value(),last_value()等关键函数,并通过不同情境展示了它们在数据分组和范围选择上的应用。
摘要由CSDN通过智能技术生成

表结构

create table stu(
    id int,         -- id
    name string,    -- 姓名
    gender string,  -- 性别
    age int,        -- 年龄
    cls string      -- 职位类别
) row format delimited fields terminated by ',';

 聚合+窗口  over(partition by 分组列 order by 排序列 rows between 开始行 and 结束行)
-- 计算范围  between  。。。 and  。。。
-- between unbounded preceding  and  current row  从当前行开始向上无限制
-- between 1 preceding  and  current row   从当前行开始向上找一行计算
-- between current row  and  current row   一般不指定
-- between current row  and  1 following   从当前行开始向下找一行
-- between current row  and  unbounded  following    从当前行开始向下无限制
-- between 1 preceding  and  1 following    向上一行到向下一行
-- between unbounded preceding  and  unbounded  following

情境1: over()里边什么都不写, 默认统计表中, 该列所有的数据.

-- 情境2: 写了partition by, 默认统计: 组内所有.

 

 情境3: 写了partition by 和 order by, 默认统计: 组内从第1行 累加至 当前行.

 

 情境4: 写了rows between ... and ..., 默认统计: 指定范围. 例如: 向上3行, 向下1行.

-- 排序函数 + 窗口函数.  例如: row_number(), rank(), dense_rank(), ntile(n)
-- 按照性别分组, 按照年龄(默认: 升序)排名 

 其它函数 + 窗口函数.  例如: lag(), lead(), first_value(), last_value()

-- 这里的需求是: 获取上1列的姓名, 如果没有就用默认值: 夯哥
 

-- 向下获取下1行数据的姓名, 没有填充: null
 

-- 获取该分组的第1条数据的 姓名.

 

-- 获取该分组的最后1条数据的 姓名.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值