Класс ошибок GROUP_BY_AGGREGATE
Агрегатные функции не разрешены в 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