Delen via


GROUP_BY_AGGREGATE foutklasse

SQLSTATE: 42903

Statistische functies zijn niet toegestaan in GROUP BY, maar gevonden <sqlExpr>.

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 tot éé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.

Mitigatie

De beperking van de fout is afhankelijk van de oorzaak:

  • Hebt u de juiste functie opgegeven?

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

  • Bent u van plan de expressie samen te voegen?

    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