다음을 통해 공유


GROUP_BY_AGGREGATE 오류 클래스

SQLSTATE: 42903

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

매개 변수

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

설명

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

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

완화 방법

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

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

    을 집계 함수가 아닌 적절한 함수로 대체 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