SQL/문제풀이

[프로그래머스] 년, 월, 성별 별 상품 구매 회원 수 구하기

응엉잉 2024. 2. 12. 02:04

https://school.programmers.co.kr/learn/courses/30/lessons/131532

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 구매 데이터와 유저 데이터를 JOIN 하여 고객의 성별 정보를 가져올 수 있도록 함

SELECT *
FROM online_sale s
    LEFT JOIN user_info u ON s.user_id = u.user_id

 

2. year, month, gender 별로 집계 되는지 확인

SELECT YEAR(s.sales_date) AS year,
    MONTH(s.sales_date) AS month,
    u.gender,
    COUNT(*)
FROM online_sale s
    LEFT JOIN user_info u ON s.user_id = u.user_id
GROUP BY year, month, u.gender
ORDER BY year, month, u.gender
실행 결과는 다음과 같다

 

year month gender count(*)
2022 1 0 30
2022 1 1 31
2022 2   2
2022 2 0 29
2022 2 1 22
2022 3 0 4
2022 3 1 4

여기서 gender가 공란인 경우 무시해야하므로, 이 조건을 설정해줘야 한다.

그리고 구매한 회원수를 세야 하므로 집계함수를 다시 작성해야 한다.

 

3. 정답

SELECT YEAR(s.sales_date) AS year,
    MONTH(s.sales_date) AS month,
    u.gender,
    COUNT(DISTINCT u.user_id) AS users -- 유저 ID 고유값 개수를 세야함
FROM online_sale s
    LEFT JOIN user_info u ON s.user_id = u.user_id
WHERE u.gender IS NOT NULL -- gender가 NULL인 경우를 WHERE로 제외
GROUP BY year, month, u.gender
ORDER BY year, month, u.gender