Partilhar via


classe de erro GROUP_BY_AGGREGATE

SQLSTATE: 42903

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 um BOOLEAN 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