MySQL - LAG()与LEAD()函数的用法

每天学一个mysql的新知识,记录下。

参考帖子:讲的很详细了

 https://www.begtut.com/mysql/mysql-lead-function.html

https://www.begtut.com/mysql/mysql-lag-function.html

 

LAG()函数 与 LEAD()函数

LAG()函数 :允许您回顾多行并从当前行访问行的数据。

LAG()语法:

LAG(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY expr,...
    ORDER BY expr [ASC|DESC],...
) 

 

LEAD()函数对于计算同一结果集中当前行和后续行之间的差异非常有用。

LEAD()语法:

LEAD(<expression>[,offset[, default_value]]) OVER (
    PARTITION BY (expr)
    ORDER BY (expr)
) 


 

lagleadMySQL的窗口函数,用于获取指定列在结果集的前一个或后一个行的值。 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的后一个学生分数为空。 通过laglead函数,可以方便地获取结果集的前一个和后一个行的值,用于一些需要比较相邻行数据的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值