Classe d’erreur GROUP_BY_AGGREGATE
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 listeSELECT
.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érateurBOOLEAN
à la clauseHAVING
.
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