Partage via


Classe d’erreur GROUP_BY_AGGREGATE

SQLSTATE : 42903

Les fonctions d’agrégation ne sont pas autorisées dans GROUP BY, mais <sqlExpr>ont été trouvées.

Paramètres

  • sqlExpr : expression contenant une fonction d’agrégation.

Explication

L’objectif de la clause GROUP BY est d’identifier l’ensemble de groupes distincts. Chaque groupe de lignes est ensuite réduit en une seule ligne à l’aide de fonctions d’agrégation dans la liste SELECT. Enfin, vous pouvez filtrer les lignes regroupées à l’aide de la clause HAVING.

sqlExpr se trouve dans la clause GROUP BY au lieu de la liste ou SELECT de la clause HAVING.

Limitation des risques

Le mode d’atténuation de l’erreur dépend de sa cause :

  • Avez-vous spécifié la bonne fonction ?

    Remplacez sqlExpr par une fonction appropriée qui n’est pas une fonction d’agrégation.

  • Avez-vous l’intention d’agréger l’expression ?

    Supprimez l’expression du GROUP BY et ajoutez-la à la liste SELECT.

  • Avez-vous l’intention de filtrer sur l’expression agrégée ?

    Supprimez l’expression de la clause GROUP BY et ajoutez-la à l’aide d’un opérateur BOOLEAN à la clause HAVING.

Exemples

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