如何将ifnull与窗口函数一起使用?
假设我的查询结果如下,lag1是使用窗口函数向下移动的预算列,因此,值为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;
发布于 2018-07-16 04:16:02
lag()
最多可接受三个参数。第一个是返回值的表达式。在这里,它只是列名。第二个决定它应该向后看多少行。默认值为1。第三个是您感兴趣的,如果找不到前一行,则为默认值。
因此,您可以直接在lag()
调用中定义默认值:
SELECT id,
budget,
lag(budget, 1, 0) OVER (ORDER BY id) lag1
FROM projects;
https://stackoverflow.com/questions/51351783
复制相似问题