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 enda rad med hjälp av mängdfunktioner i SELECT
listan.
Slutligen kan du filtrera de grupperade raderna med hjälp av HAVING
-satsen.
sqlExpr
finns i -satsen i GROUP BY
stället för listan SELECT
eller HAVING
-satsen.
Lindring
Hur du åtgärdar felet beror på orsaken:
Angav du rätt funktion?
Ersätt
sqlExpr
med en lämplig funktion som inte är en mängdfunktion.Tänker du aggregera uttrycket?
Ta bort uttrycket från
GROUP BY
och lägg till det iSELECT
listan.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