mysql 中lag和lead的详细用法
时间: 2024-04-15 12:25:46 浏览: 162
lag和lead是MySQL中的窗口函数,用于获取指定列在结果集中的前一个或后一个行的值。
lag函数用法:
LAG(column, offset, default_value) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
- column: 需要获取前一个值的列名或表达式。
- offset: 偏移量,表示要获取前几个行的值,默认为1。
- default_value: 当前行没有前一个行时的默认值,可选参数。
lead函数用法:
LEAD(column, offset, default_value) OVER (PARTITION BY partition_expression ORDER BY sort_expression)
- column: 需要获取后一个值的列名或表达式。
- offset: 偏移量,表示要获取后几个行的值,默认为1。
- default_value: 当前行没有后一个行时的默认值,可选参数。
其中PARTITION BY子句用于指定分区条件,ORDER BY子句用于指定排序条件。
举个例子,假设有一个表students包含以下数据:
+------+-------+
| name | score |
+------+-------+
| Amy | 80 |
| Bob | 90 |
| Cindy| 85 |
+------+-------+
如果要获取每个学生的前一个和后一个学生的分数,可以使用以下查询:
SELECT
name,
score,
LAG(score) OVER (ORDER BY score) AS previous_score,
LEAD(score) OVER (ORDER BY score) AS next_score
FROM students;
执行结果如下:
+------+-------+----------------+------------+
| name | score | previous_score | next_score |
+------+-------+----------------+------------+
| Amy | 80 | NULL | 85 |
| Cindy| 85 | 80 | 90 |
| Bob | 90 | 85 | NULL |
+------+-------+----------------+------------+
可以看到,Amy的前一个学生分数为空,Cindy的前一个学生分数是80,Bob的后一个学生分数为空。
通过lag和lead函数,可以方便地获取结果集中的前一个和后一个行的值,用于一些需要比较相邻行数据的场景。
阅读全文