Klasa błędów GROUP_BY_AGGREGATE
Funkcje agregujące nie są dozwolone w GROUP BY, ale znaleziono <sqlExpr>
.
Parametry
- sqlExpr: wyrażenie zawierające funkcję agregacji.
Wyjaśnienie
Celem klauzuli GROUP BY
jest zidentyfikowanie zestawu odrębnych grup.
Każda grupa wierszy jest następnie zwinięta do jednego wiersza przy użyciu funkcji agregujących na liście SELECT
.
Na koniec możesz filtrować pogrupowane wiersze przy użyciu klauzuli HAVING
.
sqlExpr
znajduje się w klauzuli GROUP BY
, a nie na liście SELECT
lub klauzuli HAVING
.
Łagodzenia
Ograniczenie ryzyka błędu zależy od przyczyny:
Czy określono poprawną funkcję?
Zastąp
sqlExpr
odpowiednią funkcją, która nie jest funkcją agregowaną.Czy zamierzasz agregować wyrażenie?
Usuń wyrażenie z
GROUP BY
i dodaj je do listySELECT
.Czy zamierzasz filtrować według zagregowanego wyrażenia?
Usuń wyrażenie z klauzuli
GROUP BY
i dodaj je przy użyciu operatoraBOOLEAN
do klauzuliHAVING
.
Przykłady
-- 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