как подвести итоги в Postgres

#sql #postgresql #column-alias

Вопрос:

У меня есть данные, которые я запрашиваю

 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
 

в моем запросе не удалось суммировать псевдоним псевдоним

Ответ №1:

Вы не можете ссылаться на псевдоним столбца в том 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