GROUP_BY_AGGREGATE-felklass
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 listanSELECT
.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 enBOOLEAN
-operator iHAVING
-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