Dela via


GROUP_BY_AGGREGATE-felklass

SQLSTATE: 42903

Mängdfunktioner tillåts inte i GROUP BY, men hittade <sqlExpr>.

Parametrar

  • sqlExpr: Uttryck som innehåller en mängdfunktion.

Förklaring

Syftet med GROUP BY-satsen är att identifiera uppsättningen distinkta grupper. Varje grupp med rader komprimeras sedan till en enskild rad med hjälp av aggregeringsfunktioner i SELECT listan. Slutligen kan du filtrera de grupperade raderna med hjälp av satsen HAVING.

sqlExpr finns i GROUP BY-satsen i stället för SELECT-listan eller HAVING-satsen.

Förmildrande omständighet

Åtgärdandet av felet beror på orsaken:

  • Har du angett rätt funktion?

    Ersätt sqlExpr med en lämplig funktion som inte är en aggregeringsfunktion.

  • Tänker du aggregera uttrycket?

    Ta bort uttrycket från GROUP BY och lägg till det i listan SELECT.

  • Tänker du filtrera på det aggregerade uttrycket?

    Ta bort uttrycket från GROUP BY-satsen och lägg till det med hjälp av en BOOLEAN-operator i HAVING-satsen.

Exempel

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