Notice
Recent Posts
Recent Comments
Link
김재호
프로그래머스 SQL 본문
테이블 결합 (JOIN)
FROM ONLINE_SALE A
JOIN USER_INFO B ON A.USER_ID = B.USER_ID
JOIN USER_INFO B ON A.USER_ID = B.USER_ID
- ONLINE_SALE 테이블에는 실제 구매 이력이 저장되어 있고
- USER_INFO 테이블에는 사용자의 성별 정보가 저장되어 있습니다.
구매 이력만으로는 성별을 알 수 없기 때문에,
USER_ID를 기준으로 두 테이블을 조인하여
“누가 언제 구매했고, 그 사용자의 성별은 무엇인지”를 함께 사용할 수 있도록 합니다.
성별 정보가 없는 데이터 제외
WHERE GENDER IS NOT NULL
성별 기준 통계를 내는 것이 목적이므로
성별이 없는(NULL) 데이터는 분석 대상에서 제외합니다.
이를 통해 결과가 더 명확해지고,
성별별 사용자 수 비교가 왜곡되지 않도록 합니다.
연도·월 단위로 기간 분리
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH
MONTH(SALES_DATE) AS MONTH
- SALES_DATE에서 연도와 월만 추출해
- 하루 단위가 아닌 월 단위 분석이 가능하도록 구성합니다.
이 방식은 월별 트렌드 분석이나
기간별 사용자 변화 추이를 볼 때 매우 자주 사용됩니다.
구매 사용자 수 집계의 핵심: DISTINCT
COUNT(DISTINCT A.USER_ID) AS USERS
이 부분이 쿼리에서 가장 중요한 핵심입니다.
- 한 사용자가 같은 달에 여러 번 구매하더라도
- DISTINCT USER_ID를 사용해 1명으로만 계산합니다.
만약 COUNT(USER_ID)를 사용했다면
이 쿼리는 “구매 횟수”를 세는 쿼리가 되어
분석 목적과 완전히 다른 결과가 나옵니다.
그룹화 기준 (GROUP BY)
GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER
- 연도
- 월
- 성별
이 세 가지 조합을 기준으로 데이터를 묶어
각 기간·성별별 구매 사용자 수를 계산합니다.
결과적으로 다음과 같은 형태의 데이터가 만들어집니다.
- 2022년 3월 / 남성 / 120명
- 2022년 3월 / 여성 / 98명
정렬 기준 (ORDER BY)
ORDER BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER
- 연도 → 월 → 성별 순으로 정렬하여
- 시간 흐름이 자연스럽게 보이도록 구성합니다.
'코딩테스트' 카테고리의 다른 글
| 프로그래머스 SQL (0) | 2026.02.27 |
|---|---|
| 프로그래머스 SQL (0) | 2026.02.21 |
| 프로그래머스 SQL (0) | 2026.02.21 |
| 프로그래머스 SQL (0) | 2026.02.21 |
| 프로그래머스 SQL (0) | 2026.02.21 |
