Поделиться через


Класс ошибок GROUP_BY_AGGREGATE

SQLSTATE: 42903

Агрегатные функции не разрешены в GROUP BY, но найдены <sqlExpr>.

Параметры

  • sqlExpr: выражение, содержащее агрегатную функцию.

Объяснение

Цель GROUP BY предложения — определить набор отдельных групп. Затем каждая группа строк сворачивается в одну строку с помощью агрегатных функций в списке SELECT . Наконец, можно отфильтровать сгруппированные строки с помощью HAVING предложения .

Находится sqlExpr в предложении GROUP BY , а не в списке или HAVING предложении SELECT .

Смягчения

Устранение ошибки зависит от причины:

  • Вы указали правильную функцию?

    Замените sqlExpr соответствующей функцией, которая не является агрегатной.

  • Собираетесь ли вы агрегировать выражение?

    Удалите выражение из GROUP BY и добавьте его в SELECT список.

  • Планируется ли выполнить фильтрацию по агрегированному выражению?

    Удалите выражение из GROUP BY предложения и добавьте его с помощью BOOLEAN оператора в HAVING предложение .

Примеры

-- 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