SQL 中的开窗函数
时间: 2024-08-13 09:09:59 浏览: 38
在SQL中,窗口函数(Window Function)是一种特殊的内置函数,它允许我们在查询结果集的基础上创建一个"窗口",并在这个窗口内进行计算或聚合操作,而不仅仅是在单行数据上。这些函数通常在`OVER()`子句中定义,这个子句指定了用于计算的范围和分组依据。
窗口函数的主要特点包括:
1. **分区**(Partitioning):根据一个或多个列对数据进行分组,每个分区内的数据会单独应用窗口函数。
2. **排序**(Ordering):可指定按一个或多个列进行排序,这对于窗口函数中的排名、累积和滑动窗口很有用。
3. **范围**(Rangings):如Row Number, Rank, Dense Rank等函数会为每个分区分配一个唯一的顺序;Lead/Lag函数则可用于查看当前行之前或之后的数据。
4. **累计值**(Cumulative Sum/Average):如Sum()、Count()等会在每一行基础上累加或计数,直到窗口结束。
常见的窗口函数有:
- ROW_NUMBER():为每行分配一个唯一数字,从1开始。
- RANK()和DENSE_RANK():类似ROW_NUMBER,但如果有相同的值,RANK会跳过,DENSE_RANK则连续。
- LAG()和LEAD():返回当前行前后的值。
- SUM(), AVG(), COUNT()等:计算指定列的累积总和、平均值或数量。
- PERCENTILE_CONT() and PERCENTILE_DISC():计算指定百分位的值。
窗口函数常用于分析报告、滚动统计以及复杂的数据分组场景。例如,你可以计算某段时间内销售额的移动平均或找出某个产品的排名变化趋势。