0

Je vous écris la requête suivante dans PostgreSQL:Comment obtenir la somme des lignes dans resultset?

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

Pour obtenir la sortie:

EMPNO SUM(SAL) 
EVEN  25 
ODD  50 

Comment dois-je modifier la requête à la sortie comme ci-dessous?

EMPNO SUM(SAL) 
EVEN  25 
ODD  50 
Total  75 

Répondre

1

Vous pouvez faire un UNION ALL comme ci-dessous

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

Il est généralement moins coûteux de réutiliser le résultat pour le calcul d'une somme en annexe aux lignes. A cette fin, je suggère un 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; 

ne fait pas une grande différence pour une requête aussi trivial que dans l'exemple, mais c'est probablement une simplification.

Questions connexes