classe di errore GROUP_BY_AGGREGATE
Le funzioni di aggregazione non sono consentite in GROUP BY, ma trovate <sqlExpr>
.
Parametri
- sqlExpr: espressione contenente una funzione di aggregazione.
Spiegazione
Lo scopo della clausola consiste nell'identificare GROUP BY
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 HAVING
clausola .
L'oggetto sqlExpr
si trova nella clausola anziché nell'elenco GROUP BY
o HAVING
nella SELECT
clausola .
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.Si intende aggregare l'espressione?
Rimuovere l'espressione dall'oggetto
GROUP BY
e aggiungerla all'elencoSELECT
.Si intende filtrare nell'espressione aggregata?
Rimuovere l'espressione
GROUP BY
dalla clausola e aggiungerla usando unBOOLEAN
operatore allaHAVING
clausola .
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