Menu
CoddyTech

LEAD 与 LAG 函数

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 61 课,共 72 课。

LEAD 和 LAG 函数可以让我们访问当前行向后或向前 n 步对应的值。

例如,如果我们想计算公司当前行与一个月前的收入比率,可以提取上个月的值:

idrevenuemonth
15325
24926
33937
47238
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id

这将创建以下表:

idrevenueprev_month_revenue
1532 
2492532
3393492
4723393

这样我们就可以计算 prev_month_revenue/revenue 比率。

如果我们改用 LEAD 函数,它会取每一行下个月的收入:

SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id
idrevenuenext_month_revenue
1532492
2492393
3393723
4723 
challenge icon

挑战

简单

可用的表和列:

  • air_conditioners: id, efficiency, strength, month

比较每台空调的效率与上一台空调的效率。

编写一个查询,显示每台空调的效率,以及按 id 确定的上一台安装的空调的效率。此外,计算当前空调与上一台空调的效率差。按 id 和 efficiency 升序排列结果。

预期输出列:

  • id
  • efficiency
  • previous_efficiency(使用 LAG)
  • efficiency_difference(当前效率 - 上一台的效率)

最后,将查询封装起来,并筛除第一行。这一行的 previous_efficiency(因此 efficiency_difference 也)为空,也就是 NULL:

SELECT * FROM (
    -- Your query here
)
WHERE previous_efficiency IS NOT NULL

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器