Database

GROUP BY와 집계함수로 배우는 데이터 분석의 첫걸음

코딩 코디네이터 2025. 4. 8. 20:45
반응형

GROUP BY와 집계함수로 배우는 데이터 분석의 첫걸음

카테고리별 상품 수?
월별 가입자 수?
이제는 직접 SQL로 뽑아보세요!

 

 

안녕하세요, 여러분 😊

오늘은 데이터 그룹화(GROUP BY)집계함수(aggregation functions)에 대해 알아보려 합니다.

SQL에서 GROUP BY는 데이터를 요약하거나 집계할 때 아주 자주 등장하는 기능인데요,

COUNT, SUM, AVG 같은 집계함수와 함께 사용하면 통계 리포트를 만드는 건 물론, 비즈니스 인사이트까지 얻을 수 있답니다.

이번 글에서는 이 개념들을 이론적으로 정리하고, 실제로 어떤 식으로 실무에서 활용되는지 실습 예제를 통해 확인해 볼 거예요.

예를 들어

"카테고리별 상품 수", "월별 회원 가입자 수", "상품별 평균 가격" 같은 데이터, 궁금하지 않으세요?

오늘 딱 정리해드릴게요!

1. GROUP BY란 무엇인가요? 🤔

여러분, SQL로 데이터를 다루다 보면

"이 항목별로 몇 개나 있지?",

"카테고리별 평균은 얼마지?" 같은 질문, 자주 하게 되죠?

바로 그럴 때 사용하는 게 GROUP BY 구문이에요.

🔍 GROUP BY의 역할

GROUP BY는 지정한 컬럼의 값을 기준으로 레코드를 그룹화합니다.

그리고 각 그룹별로 집계함수(COUNT, SUM 등)를 적용할 수 있게 해주는 강력한 기능이죠.

📌 기본 문법 구조

SELECT 컬럼명, 집계함수()
FROM 테이블명
GROUP BY 컬럼명;

📋 예제: 상품 테이블을 기준으로

SELECT category, COUNT(*) AS 상품수
FROM products
GROUP BY category;

 

위 쿼리는 products 테이블에서 category별로 몇 개의 상품이 있는지를 알려줘요.

'식품', '가전', '의류' 등으로 묶어서 몇 개씩 있는지 보는 거죠!

📊 GROUP BY를 쓸 때 주의할 점

  • SELECT절에는 GROUP BY 컬럼 또는 집계함수만 포함할 수 있어요.
  • GROUP BY에 쓰인 컬럼은 결과에도 반드시 포함되어야 해요.
  • WHERE절은 그룹화 전에 필터링, HAVING절은 그룹화 후 필터링에 사용돼요.

🧠 한 줄 요약

GROUP BY는 데이터를 묶어서 요약하고 싶을 때 쓰는 SQL의 핵심 기능!

COUNT, SUM 같은 집계함수와 찰떡궁합이에요 💡

 

 

2. 집계함수의 기본 개념과 종류 🧮

GROUP BY와 함께 가장 많이 쓰이는 것이 바로 집계함수(aggregate functions)입니다.

이 함수들은 데이터를 요약해서 보여줄 때 아주 유용한데요,

쉽게 말해

"합계", "평균", "개수", "최대값", "최소값" 같은 걸 계산할 때 쓰는 함수들이에요.

📌 자주 사용하는 집계 함수 5가지

함수 설명 예시
COUNT() 데이터 개수를 셉니다. COUNT(*)
SUM() 값들의 총합을 계산합니다. SUM(price)
AVG() 평균값을 계산합니다. AVG(score)
MIN() 가장 작은 값을 찾습니다. MIN(age)
MAX() 가장 큰 값을 찾습니다. MAX(salary)

✅ 실제 사용 예시

SELECT category, COUNT(*) AS 상품수, SUM(price) AS 총매출
FROM products
GROUP BY category;

 

위 쿼리는 카테고리별 상품 수와 총 매출을 동시에 보여주는 대표적인 예시예요.

GROUP BY 없이 COUNT나 SUM만 쓰면 전체 합계만 구해지니까, 꼭 함께 써야 의미 있는 데이터가 나와요!

💡 TIP

  • COUNT는 NULL 값을 무시하지만 COUNT(*)는 NULL도 포함해요!
  • AVG는 숫자 컬럼에만 사용할 수 있어요. 문자열은 안 됩니다!

정리하자면,

집계함수는 단순히 값을 보는 데서 끝나는 게 아니라 분석의 방향성을 잡는 데 꼭 필요한 도구들이에요.

실무에서는 거의 필수! 👍

 

 

3. GROUP BY와 집계함수 함께 쓰기 🔗

지금까지 GROUP BY집계함수의 개념을 따로따로 살펴봤다면,

이제 이 둘을 실제로 조합해보는 실전 단계로 넘어가볼까요?

이 조합은 마치 커피와 설탕처럼, 함께 쓸 때 훨씬 맛있는(!) 결과를 내줘요 😄

💻 기본 사용 예제

SELECT region, COUNT(*) AS 고객수, AVG(age) AS 평균나이
FROM customers
GROUP BY region;

 

위 쿼리는 고객들을 region(지역)별로 묶은 후, 각 지역의 고객 수평균 나이를 보여줍니다.

요약하자면, GROUP BY는 묶고 집계함수는 계산한다는 거죠.

📌 WHERE절 vs HAVING절

구문 적용 시점 예시
WHERE GROUP BY 전에 레코드 필터링 WHERE age > 20
HAVING GROUP BY 후 그룹 필터링 HAVING COUNT(*) > 10

즉, WHERE은 그룹화 전에 개별 데이터를 거르고, HAVING은 그룹화된 결과에서 조건을 적용해요.

두 절을 동시에 사용할 수도 있다는 것도 기억해 두세요!

🔥 실무 감각 익히기: 다중 집계 함수

SELECT department, COUNT(*) AS 직원수, SUM(salary) AS 총급여, MAX(salary) AS 최고연봉
FROM employees
GROUP BY department;

 

이렇게 여러 집계 함수를 동시에 써서 부서별 통계 리포트를 뽑을 수 있어요.

분석 보고서 만들 때 자주 쓰이는 유형이니 익혀두면 정말 유용하답니다.

📣 한 문장 요약!

GROUP BY + 집계함수 = 실무 보고서의 기본 구조!

쿼리를 구성할 때 WHERE, HAVING, SELECT의 순서를 꼭 신경 써주세요 🛠️

 

 

4. 실전 예제 ① : 카테고리별 상품 수와 매출 구하기 🛍️

이제 이론은 충분히 봤으니, 진짜 데이터를 기준으로 실습을 해봐야겠죠?

가장 자주 사용되는 예제 중 하나인 카테고리별 상품 수와 총 매출 구하기를 같이 해봅시다!

🗂️ 가정 테이블: products

컬럼명 설명
product_id 상품 고유 ID
product_name 상품명
category 상품 카테고리
price 상품 가격

💡 목표

  • 각 카테고리마다 상품이 몇 개 있는지 세기
  • 각 카테고리별 상품의 가격 합계를 구하기

🧑‍💻 SQL 예제

SELECT category, COUNT(*) AS 상품수, SUM(price) AS 총매출
FROM products
GROUP BY category;

 

이 쿼리는 카테고리 기준으로 데이터를 그룹화하고, 각 그룹별로 상품 개수와 총 가격을 계산합니다.

정말 실무에서 많이 쓰이는 유형이에요!

📊 결과 예시

category 상품수 총매출
전자기기 5 1,200,000
의류 8 950,000
식품 12 480,000

✅ 정리

카테고리별로 데이터를 그룹화한 뒤, COUNT()SUM()을 조합하면 상품 수와 매출을 한눈에 볼 수 있어요.

이건 마케팅, 판매, 재고 분석 등 여러 부서에서 애용하는 대표 쿼리랍니다!

 

 

 

5. 실전 예제 ② : 월별 회원 가입자 수 구하기 📆

이번에는 시간 기준으로 데이터를 그룹화하는 방법을 소개할게요.

예를 들어,

"2024년 3월에 가입한 회원 수는 몇 명일까?" 같은 질문에 답하려면 날짜 데이터를 월 단위로 그룹화해야 해요.

이건 정말 다양한 실무 분석 리포트에서 핵심적인 쿼리랍니다!

📁 가정 테이블: members

컬럼명 설명
member_id 회원 고유 번호
join_date 가입일 (DATE 형식)
email 이메일 주소

🧑‍💻 SQL 예제: 월별 그룹화

SELECT DATE_FORMAT(join_date, '%Y-%m') AS 가입월, COUNT(*) AS 가입자수
FROM members
GROUP BY 가입월
ORDER BY 가입월;

 

여기서 핵심은 DATE_FORMAT(join_date, '%Y-%m') 구문입니다.

가입일에서 연도-월(YYYY-MM)만 추출해서 그룹화하는 거죠.

📊 결과 예시

가입월 가입자수
2024-01 143
2024-02 167
2024-03 194

📌 정리

시간 데이터를 분석할 때는 반드시 그룹핑 포맷을 지정해줘야 해요.

'월', '분기', '연도' 단위로 자유롭게 요약이 가능하고, 마케팅 타이밍 분석, 사용자 행동 패턴 파악 등에 아주 유용하죠!

정말 이건 써보면 무조건 배우게 되는 기능이에요 😎

 

 

6. 마무리 🧾

오늘은 SQL에서 GROUP BY집계함수를 활용하는 핵심 개념과 실전 예제를 함께 살펴봤어요.

단순한 데이터 나열을 넘어, 카테고리별 분석, 월별 추이 분석까지 할 수 있다는 건 정말 매력적인 부분이죠.

 

특히나 COUNT(), SUM(), AVG() 같은 함수들은 실무 리포트 작성 시 거의 필수라고 해도 과언이 아니에요.

여기에 DATE_FORMAT과 같은 날짜 가공까지 잘 활용하면, 원하는 데이터를 뽑아내는 능력은 몇 단계 업그레이드됩니다 🚀

처음에는 살짝 복잡하고 헷갈릴 수 있지만, 실습을 반복하다 보면 자연스럽게 손에 익을 거예요.

 

다음 시간에는 HAVING절 활용법, 서브쿼리 등을 추가로 소개하며 좀 더 복합적인 분석을 해볼게요.

직접 SQL로 실습해보는 거, 꼭 추천드립니다.

"눈으로 보지 말고 손으로 실행하라!" 이 말, 데이터 공부에선 진짜 진리예요 😄

반응형