SUM(COUNT(*))는 SQL 문법적으로 사용할 수 없습니다.
이는 집계 함수(COUNT)가 또 다른 집계 함수(SUM) 안에 들어갈 수 없기 때문입니다.
SUM(COUNT(*))는 안 될까?SELECT region, SUM(COUNT(*)) -- ❌ 오류 발생!
FROM sales
GROUP BY region;
COUNT(*)는 각 그룹(region)별 행 개수를 반환합니다. SUM(COUNT(*))을 하면 그룹별 COUNT의 합계를 계산하려고 시도하는데,SUM(COUNT(*))은 잘못된 중첩 집계(Aggregate Nesting) 오류를 발생시킵니다. ROLLUP 사용SELECT region, COUNT(*) AS count_rows
FROM sales
GROUP BY ROLLUP(region);
➡ ROLLUP(region)을 사용하면 각 그룹별 개수 + 전체 합계가 자동으로 포함됩니다.
WITH ROLLUP 없이 UNION ALL 사용SELECT region, COUNT(*) AS count_rows
FROM sales
GROUP BY region
UNION ALL
SELECT NULL, COUNT(*)
FROM sales;
➡ 전체 개수를 별도로 추가하면 ROLLUP 없이도 같은 효과를 얻을 수 있습니다.
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 또는 서브쿼리를 활용하면 해결 가능합니다. 😊