Delen via


foutklasse GROUP_BY_AGGREGATE

SQLSTATE: 42903

Aggregatiefuncties zijn niet toegestaan in GROUP BY, maar er werden <sqlExpr>gevonden.

Parameters

  • sqlExpr-: Expressie met een statistische functie.

Uitleg

Het doel van de GROUP BY component is om de set afzonderlijke groepen te identificeren. Elke groep rijen wordt vervolgens samengevouwen in één rij met behulp van statistische functies in de SELECT lijst. Ten slotte kunt u de gegroepeerde rijen filteren met behulp van de HAVING-component.

De sqlExpr bevindt zich in de GROUP BY component in plaats van de SELECT lijst of HAVING component.

Verzachting

De beperking van de fout is afhankelijk van de oorzaak:

  • Hebt u de juiste functie opgegeven?

    Vervang sqlExpr door een geschikte functie die geen statistische functie is.

  • Wilt u de expressie aggregeren?

    Verwijder de expressie uit de GROUP BY en voeg deze toe aan de SELECT lijst.

  • Wilt u filteren op de geaggregeerde expressie?

    Verwijder de expressie uit de GROUP BY-component en voeg deze toe met behulp van een BOOLEAN-operator aan de HAVING-component.

Voorbeelden

-- 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