LEAD 和 LAG 函数
Coddy 高级 SQL 课程的第 6 课,共 13 课。
Lead 和 Lag 函数可以获取当前行之前或之后 n 步的值。
例如,如果我们想计算当前行与一个月前的公司收入比率,就需要提取两个月前的值:
| id | revenue | month |
| 1 | 532 | 5 |
| 2 | 492 | 6 |
| 3 | 393 | 7 |
| 4 | 723 | 8 |
SELECT id, revenue, LAG(month, 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 | 723 |
这样我们就能计算 prev_month_revenue/revenue 比率。
如果改用 LEAD 函数,则会获取每一行下个月的值:
| id | revenue | next_month_revenue |
| 1 | 532 | 492 |
| 2 | 492 | 393 |
| 3 | 393 | 723 |
| 4 | 723 |
挑战
简单空调可能非常贵。随着时间推移,它们变得更高效、更强劲,但这些改进的意义并不会每天都显现出来。我们需要拉长时间范围,才能看到这些改进。
为此,计算每个 id 和 month 对应的空调 efficiency 和 strength 的平均值。然后,获取当前月份以及两个月前的 efficiency 与 strength 的比值。最后,计算当前月份的比值与两个月前的比值之间的比值。返回比值大于 1.5 的结果。将此列命名为 ratio_two_months。
亲手试试
高级 SQL中的所有课
4总结
最终挑战 #1自己练习: Python 在线编译器