MySQL 프로그래머스 | 상품을 구매한 회원 비율 구하기

    728x90

     

    문제

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

     

    프로그래머스

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

    programmers.co.kr

    •  2021년에 가입한 전체 회원들 중
    • 상품을 구매한 회원수와 상품을 구매한 회원의 비율
      ( = 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수) 년, 월 별로 출력
    • 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림
    • 년 기준 오름차순, 년이 같다면 월 기준 오름차순 정렬
    • 쿼리 결과 : 년, 월 , 상품을 구매한 회원수, 상품을 구매한 회원의 비율

     

    테이블

    USER_INFO
    ONLINE_SALE

     

     

    풀이과정

    # 2021년에 가입한 회원

    • 두 테이블 조인
    • 2021년에 가입한 회원들만 필터링
    1
    2
    3
    4
    SELECT *
    FROM USER_INFO UI
    JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
    AND UI.JOINED LIKE '2021%'
    cs

     

     

    # 년, 월 별로 상품을 구매한 회원수와 상품을 구매한 회원의 비율

    • 분자 : 2021년에 가입한 회원 중 상품을 구매한 회원수  
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT YEAR(OS.SALES_DATE) YEAR,
           MONTH(OS.SALES_DATE) MONTH,
           COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS
    FROM USER_INFO UI
    JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
    AND UI.JOINED LIKE '2021%'
    GROUP BY YEAR, MONTH
    ORDER BY YEAR, MONTH
    cs

     

    • 분모 : 2021년에 가입한 전체 회원 수
    1
    2
    3
    SELECT COUNT(DISTINCT USER_ID)
                 FROM USER_INFO 
                 WHERE JOINED LIKE '2021%'
    cs

     

     

    # 정답

    • 년, 월 별로 그룹화해 상품을 구매한 회원수, 상품을 회원수 비율 모두 조회하면 끝!
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT YEAR(OS.SALES_DATE) YEAR,
           MONTH(OS.SALES_DATE) MONTH,
           COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS,
           ROUND(COUNT(DISTINCT OS.USER_ID)
             /  (SELECT COUNT(DISTINCT USER_ID)
                 FROM USER_INFO 
                 WHERE JOINED LIKE '2021%') , 1) PURCHASED_RATIO
    FROM USER_INFO UI
    JOIN ONLINE_SALE OS ON UI.USER_ID = OS.USER_ID
    AND UI.JOINED LIKE '2021%'
    GROUP BY YEAR, MONTH
    ORDER BY YEAR, MONTH
    cs

    728x90

    댓글