MySQL 8.0 window functions(二)

上一篇的内容,继续讲一下窗口函数和分析函数结合的使用。

lag与lead函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率。
https://my.oschina.net/u/2338224/blog/3112042

lag(expression, offset, default_value)

取出同一字段的前N行的数据。

语法

lag(expression, offset, default_value)

  • expression: 表达式,需要处理的结果列。
  • offset: 偏移量,必须>=0,=0时返回当前行自己。>0返回当前行的前几行
  • default_value: 默认值,第一行没有值时显示。

示例

select
name, dept,
       salary,
       lag(salary, 1) over (partition by dept order by salary ) as '上一个人的工资'
from t_window_func

lag(salary, 1) over (partition by dept order by salary ) 通过对部门分区,对薪资取上一条数据,最后根据薪资正序排序,展示了不同部门每个人自己和上一个人的薪资情况。

结果集

从结果集中,我们看到了的是,

  1. 首先数据根据partition by dept, 根据部门进行了分区,不同分区不同处理。
  2. defaultValue展示了默认值
  3. 员工2的上一个人工资=员工1的10000,员工3的上一个人工资=员工2的10000,以此类推

lead(expression, offset, default_value)

取出同一字段的后N行的数据,语法与lag的相同。

示例

select
name, dept,
       salary,
       lead(salary, 1, 'defaultValue') over (partition by dept order by salary ) as '下一个人的工资'
from t_window_func
结果集