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를 써서 회원 수를 센다.
'MYSQL > 프로그래머스 LV04' 카테고리의 다른 글
서울에 위치한 식당 목록 출력하기 (0) | 2025.03.25 |
---|---|
그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2025.03.24 |
오프라인/온라인 판매 데이터 통합하기 (1) | 2025.03.21 |
취소되지 않은 진료 예약 조회하기 (0) | 2025.03.21 |
언어별 개발자 분류하기 (0) | 2025.03.20 |