본문 바로가기

프로그래머스

SQL - 상품을 구매한 회원 비율 구하기_JOIN

반응형

1. 문제

USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.

 

*문제 원본은 '문제링크' 참고 

2. 학습 내용

1) SELECT절에서 조건문(CASE)을 이용한 컬럼 조회

2) LEFT JOIN 을 이용한 컬럼 조회

3) ROUND 함수를 이용한 데이터 소수점 조정

*회원의 비율 계산식은 문제에서 친절하게 제공해줌

🔎 3. 작성 코드

-- 코드를 입력하세요
SELECT
    YEAR(SALES_DATE) AS YEAR, -- 연도
    MONTH(SALES_DATE) AS MONTH, -- 월
    COUNT(DISTINCT CASE WHEN YEAR(JOINED) = 2021 THEN USER_INFO.USER_ID END) AS PURCHASED_USERS,
    -- CASE문 이용하여 가입연도 2021인 경우에만 USER_ID 카운팅 
    -- 구매한 회원으로 인식할 수 있는 이유: WHERE 절에서 SALES_DATE IS NOT NULL 설정
    ROUND(COUNT(DISTINCT CASE WHEN YEAR(JOINED) = 2021 THEN USER_INFO.USER_ID END) / (SELECT COUNT(DISTINCT USER_ID) FROM USER_INFO WHERE YEAR(JOINED) = 2021), 1) AS PURCHASED_RATIO
    -- 분자(2021년 구매자 수): 위에서 구한 구매자 수 그대로 사용
    -- 분모(2021년 가입자 수): USER_INFO 테이블에서 가입연도 2021인 회원 COUNT
FROM
    USER_INFO
    LEFT JOIN ONLINE_SALE ON USER_INFO.USER_ID = ONLINE_SALE.USER_ID
WHERE
    YEAR(JOINED) = 2021 AND SALES_DATE IS NOT NULL
    -- 조건1: 2021년 가입, 조건2: SALES_DATE 존재
GROUP BY
    YEAR(SALES_DATE),
    MONTH(SALES_DATE)
ORDER BY
    YEAR,
    MONTH;

 

 

반응형