Pular para o conteúdo principal

Classe de erro GROUP_BY_AGGREGATE

SQLSTATE: 42903

Funções agregadas não são permitidas em GROUP BY, mas foram encontradas em <sqlExpr>.

Parâmetros

  • SQLExpr : expressão contendo uma função agregada.

Explicação

O objetivo da cláusula GROUP BY é identificar o conjunto de grupos distintos. Cada grupo de linhas é então reduzido em uma única linha usando funções agregadas na lista SELECT. Finalmente, você pode filtrar as linhas agrupadas usando a cláusula HAVING.

O sqlExpr está localizado na cláusula GROUP BY em vez da lista SELECT ou na cláusula HAVING.

Mitigação

A mitigação do erro depende da causa:

  • Você especificou a função correta?

    Substitua sqlExpr por uma função apropriada que não seja uma função agregada.

  • Você pretende agregar a expressão?

    Remova a expressão da GROUP BY e adicione-a à lista SELECT.

  • Você pretende filtrar a expressão agregada?

    Remova a expressão da cláusula GROUP BY e adicione-a usando um operador BOOLEAN à cláusula HAVING.

Exemplos

SQL
-- 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

Relacionado