본문 바로가기
SQL

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

by 위시우 2024. 1. 26.

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

 

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

 

문제 접근 방식

  1. USER_INFO : 2021 년에 가입한 회원 목록 을 구한다.
  2. ONLINE_SALE 중 2021 년에 가입한 회원의 구매 목록 -> inner join
  3. ONLINE_SALE 을 YEAR, MONTH 년도, 월별로 통계를 낸 구매자(USER_ID)의 수(DISTINCT) -> GROUP BY YEAR MONTH 
  4. 월별 PURCHASED_RATIO (2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수) 2021년에 가입한 전체 회원 수 -> 스칼라 서브쿼리

답안

SELECT DATE_FORMAT(SALES_DATE, '%Y') AS YEAR
     , DATE_FORMAT(SALES_DATE,'%m') AS MONTH
     , COUNT(DISTINCT A.USER_ID) AS PUCHASED_USERS
     , ROUND(COUNT(DISTINCT A.USER_ID) / 
             (SELECT COUNT(DISTINCT USER_ID) AS JOINED_2021
   FROM USER_INFO
  WHERE DATE_FORMAT(JOINED, '%Y') = '2021'), 1) AS PUCHASED_RATIO
 FROM ONLINE_SALE A 
INNER JOIN (
SELECT USER_ID
     , JOINED    
   FROM USER_INFO
 WHERE DATE_FORMAT(JOINED, '%Y') = '2021'
) B
ON B.USER_ID = A.USER_ID
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
;

 

'SQL' 카테고리의 다른 글

[MySQL] datetime 과 BETWEEN A AND B  (1) 2024.01.26
sql 관련 기본 개념  (0) 2022.12.09
퍼널 분석 문제 풀이 회고  (0) 2022.11.23
ERD(Entity Relationship diagram) 읽는법  (0) 2022.11.13

댓글