classe di errore GROUP_BY_AGGREGATE

SQLSTATE: 42903

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'elenco SELECT .

  • Si intende filtrare nell'espressione aggregata?

    Rimuovere l'espressione GROUP BY dalla clausola e aggiungerla usando un BOOLEAN operatore alla HAVING 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