如何在窗口函数中使用ifnull?
假设下面有一个查询结果,lag1只是使用window函数下移的预算列,因此,值为null。但是我想用一个零来替换这个空值,这样我就可以计算预算和lag1之间的差异。
select id, budget,
lag(budget) over (order by id) as lag1
from projects;
+----+---------+---------+
| id | budget | lag1 |
+----+---------+---------+
| 1 | 1000000 | NULL |
| 2 | 100000 | 1000000 |
| 3 | 100 | 100000 |
+----+---------+---------+
我尝试了以下两个示例,但都不起作用:
select id, budget,
ifnull(lag(budget),0) over (order by id) as lag1
from projects;
select id, budget,
ifnull((lag(budget) over (order by id) as lag1),0)
from projects;
2条答案
按热度按时间tez616oj1#
我猜你的
mysql
版本低于8.0,因为第二个解决方案已经运行。sqlfiddle公司
如果你
mysql
版本低于8.0,需要在中编写子查询select
获取行之前的数据ID
测试DDL查询
[结果]:
sqlfiddle公司
ktecyv1j2#
lag()
最多可接受三个参数。第一个是返回值的表达式。这里只是列名。第二个决定它应该向后看多少行。默认值为1。第三个,对你来说很有趣的,是一个默认值,如果没有找到前一行。因此,您可以直接在
lag()
电话: