Udostępnij za pośrednictwem


Klasa błędów GROUP_BY_AGGREGATE

SQLSTATE: 42903

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

  • Czy zamierzasz filtrować według zagregowanego wyrażenia?

    Usuń wyrażenie z klauzuli GROUP BY i dodaj je przy użyciu operatora BOOLEAN 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