classe de erro GROUP_BY_AGGREGATE
As funções de agregação não são permitidas em GROUP BY, mas foram encontradas <sqlExpr>
.
Parâmetros
- sqlExpr: expressão que contém uma função de agregação.
Explicação
O objetivo da GROUP BY
cláusula é identificar o conjunto de grupos distintos.
Em seguida, cada grupo de linhas é fechado numa única linha com funções de agregação na SELECT
lista.
Por fim, pode filtrar as linhas agrupadas com a HAVING
cláusula .
O sqlExpr
está localizado na GROUP BY
cláusula em vez da SELECT
lista ou HAVING
cláusula.
Mitigação
A mitigação do erro depende da causa:
Especificou a função correta?
Substitua por
sqlExpr
uma função adequada que não seja uma função de agregação.Pretende agregar a expressão?
Remova a expressão do
GROUP BY
e adicione-a àSELECT
lista.Pretende filtrar a expressão agregada?
Remova a expressão da cláusula e adicione-a
GROUP BY
com umBOOLEAN
operador àHAVING
cláusula .
Exemplos
-- 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