如何在 Postgres 中求和

问题描述

我有我要查询的数据

total_a | total_b | sum |
1200       500       ?

这是我的查询

select 
    ROUND(SUM(CASE WHEN status= 0 THEN total_budget ELSE 0 END)) AS total_a,ROUND(SUM(CASE WHEN status= 1  THEN total_sisa_tahun_lalu ELSE 0 END)) AS total_b,SUM(COALESCE(total_a,0) + COALESCE(total_b,0))
from product

我的查询未能成功求和别名

解决方法

您不能在定义它的 SELECT 中引用列别名。原因很简单:SQL 不保证 SELECT 中表达式的计算顺序。

您可以使用 CTE、子查询或重复表达式:

select ROUND(SUM(CASE WHEN status= 0 THEN total_budget ELSE 0 END)) AS total_a,ROUND(SUM(CASE WHEN status= 1  THEN total_sisa_tahun_lalu ELSE 0 END)) AS total_b,SUM(CASE WHEN status = 0 THEN total_budget
                WHEN status = 1 THEN total_sisa_tahun_lalu
                ELSE 0
           END)
from product