classe di errore GROUP_BY_AGGREGATE
Le funzioni di aggregazione non sono consentite in GROUP BY, ma sono state trovate <sqlExpr>
.
Parametri
- sqlExpr: espressione contenente una funzione di aggregazione.
Spiegazione
Lo scopo della clausola GROUP BY
è identificare il set di gruppi distinti.
Ogni gruppo di righe viene quindi compresso in una singola riga usando funzioni di aggregazione nell'elenco SELECT
.
Infine, è possibile filtrare le righe raggruppate usando la clausola HAVING
.
Il sqlExpr
si trova nella clausola GROUP BY
anziché nella clausola SELECT
o HAVING
.
Mitigazione
La mitigazione dell'errore dipende dalla causa:
È stata specificata la funzione corretta?
Sostituire
sqlExpr
con una funzione appropriata che non è una funzione di aggregazione.Aggregare l'espressione?
Rimuovere l'espressione dal
GROUP BY
e aggiungerla all'elenco diSELECT
.Hai intenzione di filtrare l'espressione aggregata?
Rimuovere l'espressione dalla clausola
GROUP BY
e aggiungerla usando un operatoreBOOLEAN
alla clausolaHAVING
.
Esempi
-- 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