窗口函数
在 MySQL 中,窗口函数是一类特殊的函数,它们可以在查询结果集的基础上进行计算,而不是对单个行进行操作。窗口函数可以对结果集进行分区、排序和计算聚合值等操作,同时保留原始结果集的行结构。
LEAD(NUM,1) OVER (ORDER BY ID)
是一个窗口函数的具体用法
-
LEAD
函数:LEAD
函数用于获取当前行之后的指定列的值,并将其作为结果集中的新列返回。它接受两个参数,第一个参数是要获取的列名,第二个参数是要获取的行数偏移量(默认为 1,表示获取下一行的值)。- 例如,
LEAD(NUM,1)
表示获取当前行的NUM
列的值之后的下一行的NUM
列的值。
-
OVER
子句:OVER
子句用于定义窗口的范围和排序方式。它可以包含PARTITION BY
子句和ORDER BY
子句。PARTITION BY
子句用于将结果集划分为多个分区,窗口函数在每个分区内独立计算。如果没有PARTITION BY
子句,则整个结果集作为一个分区。ORDER BY
子句用于指定窗口内的行的排序方式。在LEAD
函数中,ORDER BY
子句用于确定获取下一行值的顺序。
-
示例解释:
- 假设我们有一个名为
table_name
的表,包含ID
和NUM
两列。以下查询使用了LEAD(NUM,1) OVER (ORDER BY ID)
窗口函数:
- 假设我们有一个名为
SELECT ID, NUM, LEAD(NUM,1) OVER (ORDER BY ID) AS next_num
FROM table_name;
- 这个查询将返回三列:
ID
、NUM
和next_num
。next_num
列是使用LEAD
函数计算得到的,它表示当前行的NUM
列的值之后的下一行的NUM
列的值。按照ID
列进行升序排序来确定下一行的位置。 - 例如,如果表中有以下数据:
ID | NUM |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
4 | 40 |
- 查询结果将是:
ID | NUM | next_num |
---|---|---|
1 | 10 | 20 |
2 | 20 | 30 |
3 | 30 | 40 |
4 | 40 | NULL |
- 对于第一行,
next_num
列的值为第二行的NUM
列的值(20);对于第二行,next_num
列的值为第三行的NUM
列的值(30);以此类推。对于最后一行,由于没有下一行,所以next_num
列的值为NULL
。
相关题目可以参考 力扣 高频sql50题 180 连续出现的数字