Funciones agregadas dentro de funciones agregadas en SQL

Un pequeño problema de SQL al que me tuve que enfrentar el otro día consistía en la necesidad de usar funciones agregadas (sum, max, min…) dentro de otra función agregada. El problema parte de aquí:

SUM(CASE WHEN SUM(lg_entr) > 0 AND SUM(lg_entr) = SUM(lg_sal) THEN 0
WHEN(lg_entr) > 0 THEN 1
ELSE 0 END) AS entradas;

Es necesario hacer un SUM() de un CASE-WHEN en el que hay otros SUM(). Pero esto produce el siguiente mensaje de error:

aggregate function calls may not have nested aggregate or window function

La solución que se propone es utilizar una subquery tal como se muestra a continuación:

SELECT SUM(CASE WHEN sum_lg_entr > 0 AND sum_lg_entr = sum_lg_sal THEN 0
WHEN sum_lg_entr > 0 THEN 1
ELSE 0 END) AS entradas
FROM (SELECT SUM(lg_entr) AS sum_lg_entr, SUM(lg_sal) AS sum_lg_sal
FROM tabla1);

Nótese el SELECT dentro del primer FROM.

Para saber más:
PostgreSql query problem with aggregate functions
Redshift – Aggregate function calls may not have nested aggregate or window function
Aggregate function calls cannot be nested

Deja una respuesta