如何将 Postgres SUM 结果存储在多个变量中?

问题描述 投票:0回答:1
  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
语句时,代码运行得非常好。这里有什么问题吗?

postgresql
1个回答
0
投票
  1. 您仍在
    declare
    部分。解析器希望您继续声明变量,直到遇到
    begin
    ,因此它假设您正在尝试声明一个名为
    select
    的变量,并希望您遵循您想要的类型:
    sum(case..
    is' t 是一个有效的类型名称,因此会出现错误。
  2. 使用聚合
    filter
    子句:

db<>fiddle 的演示:

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$;
© www.soinside.com 2019 - 2024. All rights reserved.