Clase de error GROUP_BY_AGGREGATE
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 listaSELECT
.¿Tiene previsto filtrar por la expresión agregada?
Quite la expresión de la cláusula
GROUP BY
y agréguela mediante un operadorBOOLEAN
a la cláusulaHAVING
.
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