SQL 窗口函数基础
SQL窗口函数(Window Functions)是一种强大的工具,允许你在不改变查询结果集的情况下,对数据进行分组、排序和计算。与聚合函数不同,窗口函数不会将多行合并为一行,而是为每一行返回一个计算结果。这使得窗口函数非常适合用于排名、累积计算、移动平均等场景。
什么是窗口函数?
窗口函数是一种特殊的SQL函数,它可以在一个“窗口”(即一组相关的行)上执行计算。这个窗口可以是一个分区(partition)、一个排序(order)或一个范围(range)。窗口函数的关键特点是,它不会减少查询结果的行数,而是为每一行返回一个计算结果。
基本语法
窗口函数的基本语法如下:
<窗口函数> OVER (
[PARTITION BY <列名>]
[ORDER BY <列名>]
[ROWS BETWEEN <起始行> AND <结束行>]
)
PARTITION BY
:将数据分成多个分区,窗口函数会在每个分区内独立计算。ORDER BY
:指定分区内的排序方式。ROWS BETWEEN
:定义窗口的范围,可以是当前行的前后几行,或者整个分区。
常见的窗口函数
以下是一些常见的窗口函数:
- ROW_NUMBER():为每一行分配一个唯一的序号。
- RANK():为每一行分配一个排名,相同值的行会得到相同的排名,后续排名会跳过。
- DENSE_RANK():与
RANK()
类似,但不会跳过后续排名。 - SUM()、AVG()、MIN()、MAX():在窗口内计算聚合值。
- LEAD() 和 LAG()