본문 바로가기
SQL

[SQL 고득점 Kit] JOIN : 상품을 구매한 회원 비율 구하기

by shur_ 2024. 10. 5.

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

 

프로그래머스

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

programmers.co.kr

 


 

 

 

ONLINE_SALE 테이블에서 같은 회원이 여러번 주문했을 수 있으니까 DISTINCT를 사용해서 COUNT 했다.

 

2021년에 가입한 전체 회원들 중 상품을 구매한 회원수 : ONLINE_SALE에 USER_INFO를 JOIN 한 뒤 WHERE 절로 가입날짜인 JOINED를 2021로 찾으면, 상품을 구매한 사람들 중 2021년에 가입한 사람들이다. 말의 앞뒤가 다른 것 같지만 같은 의미라고 생각함.

 

WITH TMP AS (
    SELECT
        COUNT(USER_ID) AS CNT
    FROM USER_INFO
    WHERE YEAR(JOINED) = 2021
)

 

2021년에 가입한 전체 회원수를 WITH 문으로 따로 구해놓고 서브쿼리로 나중에 이용한다.

 

 

최종 쿼리

WITH TMP AS (
    SELECT
        COUNT(USER_ID) AS CNT
    FROM USER_INFO
    WHERE YEAR(JOINED) = 2021
)

SELECT
    YEAR(SALES_DATE) AS YEAR,
    MONTH(SALES_DATE) AS MONTH,
    COUNT(DISTINCT A.USER_ID) AS PURCHASED_USERS,
    ROUND(COUNT(DISTINCT A.USER_ID) / (SELECT CNT FROM TMP), 1) AS PURCHASED_RATIO
FROM
    ONLINE_SALE A
    LEFT JOIN USER_INFO B
    ON A.USER_ID = B.USER_ID
WHERE
    YEAR(JOINED) = 2021
GROUP BY
    YEAR(SALES_DATE),
    MONTH(SALES_DATE)
ORDER BY YEAR, MONTH;

 

댓글