MYSQL/프로그래머스 LV04

년, 월, 성별 별 상품 구매 회원 수 구하기

수스리 2025. 3. 24. 20:50

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 

USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

SELECT
        YEAR(sales_date) AS YEAR,
        MONTH(sales_date) AS MONTH,
        GENDER,
        COUNT(DISTINCT s.user_id) AS USERS
FROM
        online_sale s
JOIN
        USER_INFO I ON s.user_id = I.user_id
WHERE 
        GENDER IS NOT NULL
GROUP BY 
        YEAR(sales_date), MONTH(sales_date), GENDER
ORDER BY
        YEAR(sales_date), MONTH(sales_date), GENDER

COUNT(DISTINCT s.user_id) AS USERS
이 부분에서 살짝 애 먹었다. 나는 기존에
COUNT(*) AS USERS 이렇게 쿼리를 짰다. 이러면 문제가 생긴다. COUNT(*)로 하면 같은 월에 쓴 결제 모두 카운트를 하는데 같은 사람이 여러번 결제 했으면 회원수를 중복돼서 카운트 한다. DISTINCT s.user_id를 써서 회원 수를 센다.