sum(count(*)) 는 안되는 이유..

SQL 공부

목록 보기
9/11

SUM(COUNT(*))는 SQL 문법적으로 사용할 수 없습니다.
이는 집계 함수(COUNT)가 또 다른 집계 함수(SUM) 안에 들어갈 수 없기 때문입니다.


SUM(COUNT(*))는 안 될까?

SELECT region, SUM(COUNT(*))  -- ❌ 오류 발생!
FROM sales
GROUP BY region;
  • COUNT(*)각 그룹(region)별 행 개수를 반환합니다.
  • 하지만 SUM(COUNT(*))을 하면 그룹별 COUNT의 합계를 계산하려고 시도하는데,
    SQL에서는 집계 함수 내부에 또 다른 집계 함수를 사용할 수 없습니다.
  • 즉, SUM(COUNT(*))잘못된 중첩 집계(Aggregate Nesting) 오류를 발생시킵니다.

올바른 해결 방법

1️⃣ ROLLUP 사용

SELECT region, COUNT(*) AS count_rows
FROM sales
GROUP BY ROLLUP(region);

ROLLUP(region)을 사용하면 각 그룹별 개수 + 전체 합계가 자동으로 포함됩니다.


2️⃣ WITH ROLLUP 없이 UNION ALL 사용

SELECT region, COUNT(*) AS count_rows
FROM sales
GROUP BY region

UNION ALL

SELECT NULL, COUNT(*)
FROM sales;

전체 개수를 별도로 추가하면 ROLLUP 없이도 같은 효과를 얻을 수 있습니다.


3️⃣ 서브쿼리 사용 (SUM(COUNT(*)) 우회)

SUM(COUNT(*))은 직접 사용할 수 없지만, 서브쿼리를 활용하면 가능합니다.

SELECT SUM(count_rows) AS total_count
FROM (
    SELECT COUNT(*) AS count_rows
    FROM sales
    GROUP BY region
) AS subquery;

➡ 이 방식은 ROLLUP 없이 각 그룹별 COUNT의 합을 구할 때 유용합니다.


결론

  • SUM(COUNT(*))은 직접 사용할 수 없지만, 서브쿼리를 이용하면 동일한 효과를 낼 수 있습니다.
  • ROLLUP(region)을 사용하면 자동으로 전체 개수까지 포함되므로 더욱 편리합니다.
  • ROLLUP 없이 구현하려면 UNION ALL 또는 서브쿼리를 활용하면 해결 가능합니다. 😊
profile
AI 답변 글을 주로 올립니다.

0개의 댓글