본문 바로가기
프로그래머스/lv5

[프로그래머스 lv5] 상품을 구매한 회원 비율 구하기 MYSQL

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 내용

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

 

해결 방법 

이 문제는 구매기록 테이블에서 연도, 달로 그룹화를 통해 문제를 해결했습니다. 

 

  1. 2021년 사이에 가입한 사람들의 USER_ID가 ONLINE_SALE 에 있는지 확인
  2. GROUP BY를 이용해 YEAR, MONTH에 해당하는 그룹화
  3. 카운트 및 구매율 계산
    (2021년 가입한 회원 중 YEAR,MONTH에 구입 기록이 있는 회원들 모두 카운트) AS PURCHASED_USERS

(2021년 가입한 회원 중 YEAR,MONTH에 구입 기록이 있는 회원들 모두 카운트) / (2021년 가입한 회원) 을 ROUND

 

 

해결 쿼리문 

SELECT YEAR(SALES_DATE) AS YEAR, 
       MONTH(SALES_DATE) AS MONTH, 
       COUNT(DISTINCT USER_ID) AS PURCHASED_USERS ,
       ROUND(COUNT(DISTINCT USER_ID) / (SELECT COUNT(USER_ID)
                                        FROM USER_INFO
                                        WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01'),1) AS PUCHASED_RATIO
FROM ONLINE_SALE
WHERE USER_ID IN (SELECT USER_ID 
FROM USER_INFO
WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01')
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC
;

 

YEAR(SALES_DATE) AS 연도, MONTH(SALES_DATE) AS MONTH, COUNT(DISTINCT USER_ID) AS PURCHASED_USERS , ROUND(COUNT(DISTINCT USER_ID) / (SELECT COUNT(USER_ID) FROM USER_INFO WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01'),1) USER_ID가 있는 ONLINE_SALE의 PUCHASED_RATIO('2020-12-31' 및 '2022-01-01' 사이에 결합된 USER_INFO에서 USER_ID 선택) 연도별 그룹, 연도별 월별 순서 ASC, 월 ASC ;