GROUP_BY_AGGREGATE, klasa błędów
Funkcje agregujące nie są dozwolone w usłudze 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 SELECT
liście.
Na koniec możesz filtrować pogrupowane wiersze przy użyciu klauzuli HAVING
.
Element sqlExpr
znajduje się w klauzuli GROUP BY
zamiast listy lub HAVING
klauzuliSELECT
.
Łagodzenia
Ograniczenie ryzyka błędu zależy od przyczyny:
Czy określono poprawną funkcję?
Zastąp
sqlExpr
element odpowiednią funkcją, która nie jest funkcją agregującą.Czy zamierzasz agregować wyrażenie?
Usuń wyrażenie z listy
GROUP BY
i dodaj je doSELECT
listy.Czy zamierzasz filtrować zagregowane wyrażenie?
Usuń wyrażenie z klauzuli
GROUP BY
i dodaj je przy użyciuBOOLEAN
operatora 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