Condividi tramite


classe di errore GROUP_BY_AGGREGATE

SQLSTATE: 42903

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 di SELECT.

  • Hai intenzione di filtrare l'espressione aggregata?

    Rimuovere l'espressione dalla clausola GROUP BY e aggiungerla usando un operatore BOOLEAN alla clausola HAVING.

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