GROUP_BY_AGGREGATE, klasa błędów

SQLSTATE: 42903

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 do SELECT listy.

  • Czy zamierzasz filtrować zagregowane wyrażenie?

    Usuń wyrażenie z klauzuli GROUP BY i dodaj je przy użyciu BOOLEAN operatora do klauzuli HAVING .

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