SQL/Coding Test

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

semperparatus 2024. 3. 15. 11:32

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

 

프로그래머스

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

programmers.co.kr


문제

쇼핑몰 가입 회원 정보를 담은 USER_INFO 테이블, 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블을 이용하여 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해라. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해라. 이 때, 성별 정보가 없는 경우 결과에서 제외하라.

코드

-- 코드를 입력하세요
SELECT YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER, COUNT(DISTINCT(USER_ID))
FROM USER_INFO U
    RIGHT OUTER JOIN ONLINE_SALE S
    USING (USER_ID)
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), U.GENDER
ORDER BY 1, 2, 3;

풀이

우선 두 테이블을 공통된 컬림인 USER_ID를 기준으로 JOIN 한 후, 주어진 조건인 성별 정보가 없는 행을 제외한다.

년, 월, 성별 기준으로 조인하고 상품을 구매한 회원 수를 집계해야 하는데 이 때 주의해야 할 점은 동일한 회원이 동일한 날짜에 여러 상품을 구매했을 수 있다. 따라서 COUNT(USER_ID)가 아닌 COUNT(DISTINCT(USER_ID))를 사용하여 회원을 중복 카운트하지 않도록 한다.