我有一个准则:
select
tbl.person
,COUNT(distinct tbl.project)
,if (tbl.stage like '%SIGNED%') then sum(tbl.value) else '0' end if as test
from
my_table tbl
group by
1
它返回错误消息:
SQL Error [42601]: ERROR: syntax error at or near "then"
我不明白。正如我在文档中看到的,if语句语法似乎使用正确
3条答案
按热度按时间b4lqfgs41#
IF
将在过程中使用,而不是在查询中使用。请改用case
表达式:注:
tbl.stage
不是group by
的一部分,因此它很可能应包含在聚合表达式内,而不是聚合表达式外case
表达式返回的所有值需要具有相同的数据类型。由于sum(tbl.value)
是数字,因此else
分支应返回0
(数字),而不是'0'
(字符串)。qvk1mo1f2#
在Postgres中,我建议使用
filter
:if
是控制流逻辑。当使用查询时,您希望学习如何将更多的内容视为集合。因此,我们的想法是筛选行,并在筛选后将值相加。z9gpfhce3#
替换
与