窗口函数
over(partition by 分组 order by 排序 rows between 起始行 and 结束行) -- 向上无限制 unbounded preceding -- 指定向上的行数 行数 preceding -- 当前行 current row -- 向下几行 1 following -- 向下无限制 unbounded following
配合聚合函数使用
聚合方法 over()
-
sum
-
avg
-
count()
-
max
-
min
配合取值函数一起使用
取值函数 over() 取值函数 over(order by 字段)
-
lag(字段,间隔行,默认值) 向上找数据
-
间隔行,间隔几行取值 默认是1行 可选
-
默认值,如果取不到值使用默认值 可选
-
-
lead(字段,间隔行,默认值) 向下找数据
-
frist_value 取第一个值
-
last_value 取最后一个值
select name , lag(name) over () as l1, lag(name,3) over () l2, lag(name,3,'itcast') over () l3, lead(name) over () lead1, lead(name,3) over () lead2, lead(name,3,'itheima') over () lead3, first_value(name) over() f1, last_value(name) over() last1 from tb_stu5;
配合生成序号函数一起使用
序号函数 over(order by 字段)
-
rank
-
生成不连续序号
-
-
desen_rank
-
生成连续序号
-
-
row_number
-
生成行号
-
select age, rank() over (order by age) as rk, dense_rank() over (order by age ) as drk, row_number() over (order by age) as rn from tb_stu5;