[SQL] 데이터 그룹화하기: GROUP BY

jul ee·2025년 4월 4일

데이터 성장기

목록 보기
13/139

🖇  GROUP BY
🖇  GROUP BY 사용하기


데이터 분석에서 전체 값을 요약해서 보는 일은 매우 중요하다.

"어떤 계절에 이용량이 많았는지", "어떤 시간대에 고객이 몰리는지", "날씨가 어떨 때 더 많이 이용하는지"와 같은 질문에 답하려면, 데이터를 그룹화하고 요약할 수 있는 능력이 필요하다.
(흥미롭지 않은가? 😊)

그럴 때 자주 사용하는 것이 바로 앞서 다룬 집계 함수와 GROUP BY 이다.

이번 글에서는 GROUP BY 를 사용할 때 꼭 알아야하는 규칙들과
함께 사용할 수 있는 집계 함수들(COUNT, SUM, AVG, MAX, MIN)을 중심으로

SQL로 데이터를 그룹화하고 요약하는 방법을 알아보았다.


데이터를 통해 패턴을 발견하고 의미를 요약하는 분석 단계로 넘어가기 위해서는

GROUP BY 와 집계 함수에 익숙해져야 할 것이다.



🖇  GROUP BY

GROUP BY

특정 컬럼을 기준으로 데이터를 그룹화할 때 사용한다.

집계 함수와 함께 사용하면 그룹별 요약값(건수, 합계, 평균 등)을 구할 수 있다.

작성 순서

SELECT
FROM 
WHERE
GROUP BY
ORDER BY 
LIMIT

     ->  GROUP BYWHERE 절 다음, ORDER BY 보다 먼저 실행된다.



꼭 알아야 할 규칙

✓  SELECT 절에 컬럼명과 집계함수가 같이 기술된 경우, 컬럼명은 GROUP BY 에 기술되어야 한다.

  • GROUP BY 는 "어떤 컬럼을 기준으로 요약할지"를 지정하는 것이므로
  • 집계함수가 아닌 컬럼은 GROUP BY 에서 그룹 기준으로 삼아야 SQL이 "그 컬럼의 어떤 값을 보여줄지" 를 판단할 수 있다.
SELECT 컬럼1, SUM(컬럼)
FROM 테이블명
GROUP BY 컬럼1

-- GROUP BY 뒤에서는 컬럼명 뿐 아니라 컬럼 숫자를 사용해도 된다.
-- 만약 비집계 컬럼을 GROUP BY 에 기술하지 않는다면?

SELECT 컬럼1, 컬럼2, SUM(컬럼)
FROM 테이블명
GROUP BY 컬럼1

-- SQL이 명확한 기준 없이 값 하나를 선택해야 하므로 오류 발생!

✓  GROUP BY 절에 지정되지 않은 컬럼SELECT 절에서 집계 함수 없이 사용할 수 없다.

  • 어떤 행을 출력해야 할지 알 수 없기 때문!
  • 그룹당 하나의 결과만 출력해야 하기 때문에, 어떤 컬럼을 선택할지 명확해야 하는 것이다.
  • 다르게 말하면,
    SELECT 절의 비집계 컬럼은 반드시 GROUP BY 에 포함되어야만 정확하고 예측 가능한 결과를 얻을 수 있다는 것이다.

✓   결과값은 GROUP BY 절에 기술된 컬럼 항목들의 행의 개수에 의해 결정된다.

  • GROUP BY 는 집계 함수 없이도 사용할 수 있지만,
    일반적으로는 집계 함수와 함께 사용할 때 의미가 크다.

GROUP BY 를 사용하면,
SELECT 절에서 자유롭게 아무 컬럼이나 가져올 수 없다는 것을 기억하자 :)




🖇  GROUP BY 사용하기

GROUP BY 와 집계 함수를 함께 사용하여 데이터를 그룹화하는 예제를 살펴보자.

계절별 평균 온도(temp) 확인하기

-- 평균 온도(temp) 확인하기

SELECT AVG(temp) AS "평균온도"
FROM bike


-- 계절과 온도의 RAW 데이터 확인하기

SELECT season, temp
FROM bike
-- 계절별 평균 온도(temp) 확인하기

SELECT season AS "계절",
       AVG(temp) AS "평균온도"
FROM bike
GROUP BY season

시간대별 이용 건수 합계 확인하기

    컬럼명이 길거나 복잡할 경우에는
    GROUP BY 뒤에 컬럼명 대신, SELECT 절의 컬럼 순서 번호를 사용할 수도 있다

-- 시간대별 이용 건수 합계 구하기

SELECT hr AS "시간대",
       SUM(cnt) AS "이용건수합계" 
FROM bike
GROUP BY 1


지금까지 살펴본 내용을 정리해 보자.

항목설명
GROUP BY데이터를 특정 기준으로 묶어서 그룹화
집계 함수그룹별로 계산된 요약 정보를 제공
주의사항SELECT 절에서 집계 함수 없이 사용된 컬럼은 GROUP BY에 반드시 포함되어야 함


앞서 언급했듯이

데이터를 통해 인사이트를 얻는다는 건 단순히 많은 양의 데이터를 보는 것이 아니라,
그 속에서 의미 있는 패턴을 요약해내는 것이다.

오늘 살펴본 GROUP BY 와 집계 함수의 조합으로 이러한 능력을 기를 수 있을 것이다.

다음 글에서는 GROUP BY와 가장 많이 함께 쓰이는 HAVING 절을 통해, 그룹별 조건 필터링하는 것을 알아볼 예정이다 :)

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글