다음을 통해 공유


GROUP_BY_AGGREGATE error class

SQLSTATE: 42903

집계 함수는 GROUP BY에서 허용되지 않지만 <sqlExpr>에서 발견되었습니다.

매개 변수

  • sqlExpr: 집계 함수를 포함하는 식입니다.

설명

GROUP BY 절의 목적은 고유 그룹 집합을 식별하는 것입니다. 그런 다음 각 행 그룹은 SELECT 목록에서 집계 함수를 사용하여 단일 행으로 축소됩니다. 마지막으로 HAVING 절을 사용하여 그룹화된 행을 필터링할 수 있습니다.

sqlExpr GROUP BY 목록 또는 SELECT 절 대신 HAVING 절에 있습니다.

Mitigation

오류 완화는 원인에 따라 달라집니다.

  • 올바른 함수를 지정했나요?

    sqlExpr 집계 함수가 아닌 적절한 함수로 대체합니다.

  • Do you intend to aggregate the expression?

    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