SQL에서 데이터 집계는 분석 및 인사이트 도출에 있어 중요한 역할을 합니다. 특정 데이터 집합을 기준으로 그룹별로 정보나 통계를 얻고자 할 때, 주로 사용하는 기능이 바로 그룹 함수입니다. 본 글에서는 SQL의 그룹함수 활용법과 GROUP BY 절 사용 예시를 살펴보며, 다양한 그룹함수에 대한 이해를 도와드리겠습니다.

SQL의 그룹함수란?
그룹함수는 주어진 데이터 집합을 집계하여 요약된 정보를 제공하는 데 사용됩니다. 이러한 함수는 특정 컬럼을 기준으로 데이터의 총합, 평균, 개수 등을 계산하는 데 유용합니다. 대표적인 그룹함수에는 COUNT(), SUM(), AVG(), MIN(), MAX() 등이 있습니다.
GROUP BY 절의 기본 사용법
데이터를 집계할 때 GROUP BY 절을 사용합니다. 다음은 상품별 매출을 집계하는 간단한 쿼리입니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY 상품ID, 월;
위의 쿼리는 Group by 절을 통해 상품 ID와 월별로 매출 합계를 산출합니다. 이를 통해 흐름이나 트렌드를 쉽게 파악할 수 있습니다.
ROLLUP을 통한 집계
ROLLUP은 다차원적인 집계를 수행하는 함수로, 소그룹과 전체 합계를 동시에 계산할 수 있습니다. 다음과 같은 쿼리를 통해 상품별 및 전체 매출액을 한 번에 확인할 수 있습니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID, 월);
결과물에서 NULL 값으로 표시되는 항목이 각 그룹과 전체의 합계입니다. 이러한 방식으로 더 간편하게 데이터 분석이 가능합니다.
CUBE 함수의 활용
CUBE 함수는 다차원적인 집계 결과를 산출하는 데 탁월합니다. CUBE를 사용하면, 지정된 모든 컬럼에 대해 소그룹 합계를 동시에 제공받을 수 있습니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY CUBE(상품ID, 월);
이 쿼리는 상품별뿐만 아니라 월별 매출 합계 또한 동시에 보여 주기 때문에, 더욱 다양한 분석이 가능합니다.
GROUPING SETS의 이해
GROUPING SETS는 특정 항목별로 소계를 구하는 유용한 기능입니다. 여러 개의 집계 결과를 동시에 컬렉션 할 수 있습니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS(상품ID, 월);
이 쿼리는 GROUPING SETS를 통해 각 그룹별의 합계만 간결하게 보여줍니다. ROLLUP이나 CUBE보다 간단한 결과를 원할 때 유용합니다.
GROUPING 함수
GROUPING 함수는 집계 결과에 따라 1 또는 0의 값을 반환받습니다. 이 정보를 바탕으로 데이터의 계층을 이해하기 쉽습니다.
SELECT
CASE GROUPING(상품ID) WHEN 1 THEN '모든 상품ID' ELSE 상품ID END AS 상품ID,
CASE GROUPING(월) WHEN 1 THEN '모든 월' ELSE 월 END AS 월,
SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID, 월);
이 쿼리는 NULL값으로 표시되었던 필드를 구체화하며, 각 그룹으로 나뉜 결과를 더욱 명확하게 해줍니다.
HAVING 절과의 조합
GROUP BY 절을 사용할 때는 HAVING 절을 통해 집계된 결과에 필터를 적용할 수 있습니다. WHERE절과는 달리, HAVING절은 그룹화된 후의 데이터를 조건으로 필터링할 수 있습니다.
SELECT 상품ID, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY 상품ID
HAVING SUM(매출액) > 1000;
위 쿼리는 매출이 1000을 초과하는 상품 ID별 매출 합계를 조회하는 예시입니다. HAVING 절을 통해 특정 조건을 지정할 수 있다는 점에서 유용합니다.
GROUP BY의 사용과 에러 방지
GROUP BY 사용 시 주의해야 할 점은, SELECT문에 등장하는 모든 칼럼이 GROUP BY 또는 집계 함수에 포함되어야 한다는 것입니다. 예를 들어, 아래와 같이 잘못된 쿼리를 작성하면 에러가 발생합니다.
SELECT a.ID, a.column1, SUM(b.VALUE)
FROM TEST_TABLE a
LEFT JOIN TEST_TABLE b ON (a.ID = b.ID)
GROUP BY a.ID;
위 쿼리에서 a.column1이 GROUP BY 절에 포함되지 않아 오류가 발생할 수 있습니다. 따라서 그룹화할 column은 항상 주의해서 설정해야 합니다.

결론
SQL의 그룹 함수와 GROUP BY는 데이터 분석에서 필수적인 도구입니다. 다양한 집계 방법을 통해 데이터의 통찰력을 높일 수 있으며, 이를 효과적으로 활용할 수 있는 방법을 숙지하는 것이 중요합니다. 이렇게 함으로써, 데이터 기반의 결정 및 전략 수립에 기여할 수 있습니다.
이 글에서 소개한 내용들이 SQL에서의 데이터 집계와 분석에 많은 도움이 되기를 바랍니다.
자주 묻는 질문 FAQ
SQL 그룹함수란 무엇인가요?
SQL 그룹함수는 특정 데이터 집합을 요약하여 집계 정보를 제공하는 함수입니다. 이를 통해 데이터의 총합, 평균, 개수를 계산할 수 있습니다.
GROUP BY 절은 어떻게 사용하나요?
GROUP BY 절은 데이터 집합을 그룹화하고 특정 기준으로 집계 결과를 도출하는 데 사용됩니다. 예를 들어, 매출 데이터를 상품별로 그룹화하여 합계를 구할 수 있습니다.
HAVING 절은 무엇을 위해 사용되나요?
HAVING 절은 그룹화된 데이터에 대한 조건을 적용하여 필터링하는 데 사용됩니다. 이는 GROUP BY 절과 함께 사용되며, 특정 조건을 만족하는 집계 결과를 조회하는 데 유용합니다.
답글 남기기