LEAD 与 LAG 函数
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 61 课,共 72 课。
LEAD 和 LAG 函数可以让我们访问当前行向后或向前 n 步对应的值。
例如,如果我们想计算公司当前行与一个月前的收入比率,可以提取上个月的值:
| id | revenue | month |
| 1 | 532 | 5 |
| 2 | 492 | 6 |
| 3 | 393 | 7 |
| 4 | 723 | 8 |
SELECT id, revenue, LAG(revenue, 1) OVER (ORDER BY MONTH) as prev_month_revenue
FROM table1 ORDER BY id这将创建以下表:
| id | revenue | prev_month_revenue |
| 1 | 532 | |
| 2 | 492 | 532 |
| 3 | 393 | 492 |
| 4 | 723 | 393 |
这样我们就可以计算 prev_month_revenue/revenue 比率。
如果我们改用 LEAD 函数,它会取每一行下个月的收入:
SELECT id, revenue, LEAD(revenue, 1) OVER (ORDER BY MONTH) as next_month_revenue
FROM table1 ORDER BY id| id | revenue | next_month_revenue |
| 1 | 532 | 492 |
| 2 | 492 | 393 |
| 3 | 393 | 723 |
| 4 | 723 |
挑战
简单可用的表和列:
air_conditioners:id,efficiency,strength,month
比较每台空调的效率与上一台空调的效率。
编写一个查询,显示每台空调的效率,以及按 id 确定的上一台安装的空调的效率。此外,计算当前空调与上一台空调的效率差。按 id 和 efficiency 升序排列结果。
预期输出列:
idefficiencyprevious_efficiency(使用 LAG)efficiency_difference(当前效率 - 上一台的效率)
最后,将查询封装起来,并筛除第一行。这一行的 previous_efficiency(因此 efficiency_difference 也)为空,也就是 NULL:
SELECT * FROM (
-- Your query here
)
WHERE previous_efficiency IS NOT NULL亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
11窗口函数第 1 部分
ROW_NUMBER 函数ORDER BY 排序依据PARTITION BY 分区依据PARTITION 与 ORDERLEAD 与 LAG 函数回顾:LEAD 与 LAG回顾:图片回顾:方框自己练习: SQL 在线编辑器