表结构
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条数据的 姓名.