SQL 문제풀이

[프로그래머스 SQL] LV.5 상품을 구매한 회원 비율 구하기

냄비짱 2023. 8. 12. 05:09
728x90

❓ Question

❗ Answer

SELECT YEAR(sale.sales_date) year
        , MONTH(sale.sales_date) month
        , COUNT(DISTINCT sale.user_id) purchased_users
        , ROUND(COUNT(DISTINCT sale.user_id)/(SELECT COUNT(*)
                                                FROM user_info
                                                WHERE YEAR(joined) = '2021'),1) purchased_ratio
    FROM user_info info
    INNER JOIN online_sale sale
            ON info.user_id = sale.user_id
    WHERE YEAR(info.joined) = '2021'
    GROUP BY year, month
    ORDER BY year, month;

📌 Discussion

  • (2021년에 가입한 사람 중 언제라도 구입한 내역이 있는 사람 / 2021년에 가입한 사람)을
    sales_date의 연도와 월 별로 구하는 문제
  • 첫번째 sub query에서 2021년에 가입한 사람의 수를 추출
  • user_id 기준으로 join 후 WHERE절에서 가입연도가 2021년인 레코드만 남긴다.
  • sales_date에 대해 GROUP BY 진행
  • 한 사람이 여러 제품을 구매할 수 있으므로 DISTINCT로 중복제거