📊 SQL에서 GROUP BY와 DISTINCT의 차이: 언제 어떤 걸 써야 할까?
SQL에서 데이터를 집계할 때 자주 헷갈리는 개념이 바로 GROUP BY와 DISTINCT입니다.
특히, 사용자 수를 셀 때와 거래 건수를 셀 때 어떤 걸 써야 하는지 정확히 구분해두면 문제를 더 잘 풀 수 있어요!
✅ 핵심 개념 요약
GROUP BY: 데이터를 특정 기준으로 묶는 것
DISTINCT: 중복을 제거하는 것
COUNT(*): 모든 행의 개수 (중복 포함)
COUNT(DISTINCT 컬럼): 고유한 값의 개수 (중복 제거)
예시
user_id gender sales_date
1 F 2022-03-01
1 F 2022-03-10
2 F 2022-03-20
SELECT
YEAR(sales_date) AS year,
MONTH(sales_date) AS month,
COUNT(*) AS transactions
FROM online_sale
GROUP BY year, month;
결과: 같은 사람이 여러 번 샀으면 그만큼 건수로 계산됨
👉 실제 거래 횟수(행 개수)를 알고 싶을 때 사용
SELECT
YEAR(sales_date) AS year,
MONTH(sales_date) AS month,
COUNT(DISTINCT user_id) AS users
FROM online_sale
GROUP BY year, month;
결과: 중복된 user_id는 한 번만 셈
👉 "이 달에 몇 명이 구매에 참여했는가?"를 알고 싶을 때 사용
"이 달에 총 몇 건의 거래가 있었을까?": count() -> 모든 거래 건수
"이 달에 실제로 몇 명이 구매 했을까?": count(DISTINCT user_id) -> 고유 사용자 수
"성별별 거래 건수는?": group by gender + count()
"성별별 구매자 수는?": GROUP BY gender + COUNT(DISTINCT user_id)
결론
GROUP BY는 데이터를 묶고, DISTINCT는 중복을 제거한다.
실제 유저 수가 궁금하면 → COUNT(DISTINCT user_id)
거래 건수가 궁금하면 → COUNT(*)