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
部分中。解析器希望您继续声明变量,直到它达到 a,begin
因此它假设您正在尝试声明命名的内容select
,并在其后面加上您想要的类型。您会收到错误,因为sum(case..
不是有效的类型名称。这不是一个好主意,但从技术上讲,您可以定义一个名为 的 PL/pgSQL 变量
select
。一旦添加了缺少的
begin
声明后,其余代码就可以了。这正是将Postgres SUM 结果存储在多个变量中的方法。使用聚合
filter
子句。db<>fiddle 上的演示: