Compartir vía


Clase de error GROUP_BY_AGGREGATE

SQLSTATE: 42903

No se permiten funciones de agregado en GROUP BY, pero se han encontrado <sqlExpr>.

Parámetros

  • sqlExpr: expresión que contiene una función de agregado.

Explicación

El propósito de la cláusula GROUP BY es identificar el conjunto de grupos distintos. A continuación, cada grupo de filas se contrae en una sola fila mediante funciones de agregado en la lista SELECT. Por último, puede filtrar las filas agrupadas mediante la cláusula HAVING.

sqlExpr se encuentra en la cláusula GROUP BY en lugar de encontrarse en la lista SELECT o la cláusula HAVING.

Mitigación

La mitigación del error depende de la causa:

  • ¿Especificó la función correcta?

    Reemplace sqlExpr por una función adecuada que no sea una función de agregado.

  • ¿Tiene previsto agregar la expresión?

    Quite la expresión de GROUP BY y agréguela a la lista SELECT.

  • ¿Tiene previsto filtrar por la expresión agregada?

    Quite la expresión de la cláusula GROUP BY y agréguela mediante un operador BOOLEAN a la cláusula HAVING.

Ejemplos

-- An aggregation in the GROUP BY clause
> SELECT a FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a, sum(b);
 [GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found sum(T.b).; line 1 pos 58;

-- Move the expression to the SELECT list
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a;
 1    5

-- An aggregation in the GROUP BY clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a, sum(b) > 1;
 [GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found (sum(T.b) > CAST(1 AS BIGINT)).; line 1 pos 74;

-- Move the expression to the HAVING clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a HAVING sum(b) > 1;
 1    5