开窗函数汇总
Function(arg1) over(partition by arg order by arg <windows_expression>)
1. 窗口函数 over() 后面的为窗口函数 ,sum这种为 分析函数.
over() : 指定分析函数工作的数据窗口大小,窗口会随着行进行变化.
window_express:窗口的边界设置.默认:[rows between unbounded proceeding and current rows] 起点到当前行累加.
partition by : 表示将数据先按照字段进行分区.
order by 表示将各个分区内的数据按字段进行排序.
.使用详解:
① 如果不指定partition by,则不对数据进行分区,换句话说,所有数据看作同一个分区。
② 如果不指定order by, 则不对各分区进行排序,通常用于那些顺序无关的窗口函数,如sum()。
③ 如果不指定窗口子句:
不指定order by,默认使用分区内所有行,等同于
Function() over(rows between unbounded precedeing and unbounded following)
如果指定order by,默认使用分区内第起点到当前行,等同于
Function() over(rows between unbounded preceding and current row)
1.排序函数
row_number() over(partition by column order by column )
rank() over(partition by column order by column )
dense_rank() over(partition by column order by column )
ntile()
2.聚合函数
sum()
avg()
count()
3.
lag()
expression : 要访问前一个行的列或表达式。
lead()
expression : 要访问后一个行的列或表达式。
SELECT id, name, score,
LAG(score, 1, 0) OVER (PARTITION BY group_name ORDER BY id) AS prev_score,
LEAD(score, 1, 0) OVER (PARTITION BY group_name ORDER BY id) AS next_score
FROM student_scores;
在这个示例中, LAG 函数用于获取前一个学生的分数, LEAD 函数用于获取后一个学生的分数。通过指定偏移量和默认值,可以处理边界情况。这两个函数在需要访问前后行数据进行比较或计算的情况下非常有用。
first_value()
4.窗口表达式.
n preceding 往前n行.
n following 忘后n行.
current row 当前行.
unbounded precding 从前面的起点开始.
unbounded following 到后面的终点结束.