https://school.programmers.co.kr/learn/courses/30/lessons/131532
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
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 5월 식품들의 총매출 조회하기 (0) | 2024.02.12 |
---|---|
[프로그래머스] 입양 시각 구하기 (2) (0) | 2024.02.12 |
[프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 📌 (0) | 2024.02.12 |
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.02.11 |
[프로그래머스] 강원도에 위치한 생산공장 목록 출력하기 (0) | 2024.02.10 |