분류를 해 주는 GROUP BY 사용법 너무 편해
데이터를 집계함수를 사용하면 전체 데이터의 요약 통계치를 알 수 있다. 하지만 구체적으로 우리가 어떤 기준으로 데이터를 나누고 그 분류된 데이터를 바탕으로 의미 있는 정보를 얻으려면 GROUP BY 사용법을 알아야 한다. GROUP BY가 얼마나 유용하게 쓰이는 지 한번 알아보자
GROUP BY 사용법 모르면 분석 하기 너무 어렵다.

나는 고향이 경상남도이다. 경상남도에는 창원시, 진주시, 김해시, 양산시 등 아주 많은 시와 군이 포함되어 있다. 만약 우리가 경상남도 시군 구분해서 박물관에 대한 정보를 얻고자 한다면 어떻게 할 것인가?
나는 처음에 WHERE를 생각해 보았다. 조건으로 구할 수 있지 않을까?
WHERE 시군 = ‘창원시’ 쿼리를 짜고 나니 생각이 났다. ‘엉 이러면 창원시만 나오는데, 어떻게 시군 컬럼 내 그 많은 시군를 구분해서 분류할 수 있을까?’ 했다.
GROUP BY 사용법

SELECT 시군
, SUM (number_museum)
FROM museum
GROUP BY 시군
한 가지 기억할 점은 일반적으로 분류를 하는 기준, 여기서는 시군을 SELECT에서도 출력해 준다는 점이다. 그럼으로 이 개의 절에 시군이 이름이 보일 것이다.
위치는 일반적으로 FROM이나 WHERE 아래에 작성이 된다. 위에서는 WHERE 절이 없음으로 FROM 다음으로 나왔다.
WHERE vs HAVING
- WHERE : GROUP BY 하기 전에 필터링 (원본 데이터 기준)
- HAVING : GROUP BY 후 연산 결과물에 대해서 필터링 (분류된 데이터 기준)
즉, WHERE이 원본 데이터를 기준으로 필터링을 한다면, GROUP BY는 어떤 기준으로 분류된 것의 데이터 기준으로 필터링이 되는 것이다.
예를 들어 레스토랑 월별 매출에서 이미 월별이라는 말에서 분류를 해야 한다는 것을 알 것이다. GROUP BY 사용법으로 12개월이 다 있다는 전제에서 1월, 2월 이런 식으로 분류될 것이다.
그리고 우리는 그 분류된 월별의 매출액이 어떤 기준 이상(1,000만원)인 것만 나타나줘 라고 한다면 쿼리 아래와 같다
SELECT 월
, SUM(monthly_sales)
FROM restaurant
GROUP BY 월
HAVING SUM(monthly_sales) >= 1,000(만원)
|
월 |
SUM(monthly_sales) |
|
1월 |
2,000만원 |
|
5월 |
1,500만원 |
|
8월 |
3,000만원 |
|
9월 |
1,800만원 |
|
10월 |
2,200만원 |
|
12월 |
1,700만원 |
엇, 12개월이 다 나와야 하는 거 아니에요 라고 할 수 있지만, 우리는 GROUP BY에 이은 HAVING 에서 매출이 1,000만원 이상인 것 가져오라는 조건을 붙였기에 위와 같이 나온다.
과연 GROUP BY는 언제 사용할까?
나는 절을 이해하는 것이 중요하다고 생각하지만, 결국은 어떤 상황에서 쓰여지는 가가 더 중요하다고 생각한다.
레스토랑의 오너라면, 일별, 월별, 연도별 매출액, 비용, 순수익 이런 것을 알아내기 위해 사용되어 질 수 있다.
이커머스 마케터는 고객 세그먼트를 파악하기 위해 그 기준은 연령별, 성별, 회원등급별로 데이터를 볼 때도 사용될 수 있다.
이야기를 하다 보니, 정말 데이터 분석에서 GROUP BY가 중요하구나 하고 느껴진다. 혹시 GROUP BY에 더 알아보고 싶으신 분들은 W3school SQL 웹사이트로 와서 더 연습해 보시기 바란다.
마무리
오늘은 GROUP BY 사용법에 대해서 이야기를 해봤다. 데이터에서 어떤 기준으로 분류를 할 때 GROUP BY를 사용하면 된다는 것을 기억했음 좋겠다. 그리고 필터링 후 조건을 걸어줄 때는 HAVING을 사용하면 된다고 것도 말이야.
[무조건 먼저 읽고 넘어왔어야 하는 글]
