DECLARE
total1 float;
total2 float;
SELECT
SUM(CASE WHEN totals.valid = 0 THEN amount ELSE 0 END),
SUM(CASE WHEN totals.valid <> 0 THEN amount ELSE 0 END)
INTO total1, total2
FROM
totals;
在这里,Postgres 通知我条件语法有错误:
ERROR: 42601: syntax error at end of input
LINE 12: SUM(CASE WHEN totals.valid = 0 THEN amount ELSE 0 END),
^
CONTEXT: invalid type name "SUM(CASE WHEN totals.valid "
但是当我删除
INTO total1, total2
语句时,代码运行得非常好。这里有什么问题吗?
declare
部分。解析器希望您继续声明变量,直到遇到 begin
,因此它假设您正在尝试声明一个名为 select
的变量,并希望您遵循您想要的类型: sum(case..
is' t 是一个有效的类型名称,因此会出现错误。filter
子句:do $f$
DECLARE
total1 float;
total2 float;
BEGIN--this was missing
SELECT
SUM(amount)FILTER(WHERE totals.valid=0),
SUM(amount)FILTER(WHERE totals.valid<>0)
INTO total1, total2
FROM
totals;
end $f$;