GROUP_BY_AGGREGATE 错误类
不允许在 GROUP BY中使用聚合函数,但在 <sqlExpr>
中找到了聚合函数。
参数
- sqlExpr:包含聚合函数的表达式。
解释
GROUP BY
子句的目的是标识不同的组集。
然后,使用 SELECT
列表中的聚合函数将每组行折叠成一行。
最后,可以使用 HAVING
子句筛选分组的行。
sqlExpr
位于 GROUP BY
子句中,而不是 SELECT
list 或 HAVING
子句。
缓解
错误的缓解取决于原因:
是否指定了正确的函数?
将
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