0

我寫了下面的查詢PostgreSQL中:如何獲得結果集中的行數?

select case mod(empno,2) 
     when 0 then 'EVEN ' 
     else 'ODD ' 
     end as empno, sum(sal) 
from emp 
group by mod(empno,2); 

要得到的輸出:

EMPNO SUM(SAL) 
EVEN  25 
ODD  50 

我應該如何修改查詢到輸出如下?

EMPNO SUM(SAL) 
EVEN  25 
ODD  50 
Total  75 

回答

1

你可以做一個UNION ALL像下面

select case mod(empno,2) 
when 0 then 'EVEN ' 
else 'ODD ' 
end as empno, sum(sal) 
from emp 
group by mod(empno,2) 

UNION ALL 

select 'TOTAL' as empno, 
sum(sal) 
from emp 
0

它通常是便宜重用結果爲附加到行的總和計算。爲了這個目的,我建議一個CTE

WITH cte AS (
    SELECT CASE WHEN empno % 2 = 0 
      THEN 'EVEN ' 
      ELSE 'ODD ' 
      END AS empno 
     , sum(sal)::int AS sum_sal 
    FROM emp 
    GROUP BY 1 
    ) 
SELECT * 
FROM cte 

UNION ALL 
SELECT 'Total ', sum(sum_sal)::bigint 
FROM cte; 

不會使微不足道作爲例子查詢一個很大的區別,但是這可能是一個簡化。

相關問題