관리 메뉴

오늘도 배운다

상품을 구매한 회원 비율 구하기 / 프로그래머스, SQL, MySQL 코딩테스트 연습 JOIN 본문

코딩테스트연습(SQL)

상품을 구매한 회원 비율 구하기 / 프로그래머스, SQL, MySQL 코딩테스트 연습 JOIN

LearnerToRunner 2022. 11. 29. 11:10

문제

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

 

 

제출답안(MySQL)

SELECT YEAR(os.sales_date) AS year,
    MONTH(os.sales_date) AS month, 
    COUNT(DISTINCT(os.user_id)) AS purchased_users,
    ROUND(COUNT(DISTINCT(os.user_id))/
         (SELECT COUNT(user_id) FROM user_info WHERE YEAR(joined) = 2021), 1) AS purchased_ratio
    
FROM(
    online_sale AS os LEFT JOIN user_info AS ui 
    ON os.user_id = ui.user_id
    )
WHERE YEAR(joined) = 2021
GROUP BY year, month
ORDER BY year, month

 

 

 

풀이(MySQL)

더보기

Online_sale 및 User_info 조인 후 2021년도 가입자만 추려낸 테이블

FROM(
    online_sale AS os LEFT JOIN user_info AS ui 
    ON os.user_id = ui.user_id
    )
WHERE YEAR(joined) = 2021

 

연, 월, 2021년 가입자 중 구매한 인원 수, 2021년 가입자 중 구매자 비율 계산

>> 테이블 자체가 2021년 가입자의 구매자료만 있기 때문에 COUNT(os.user_id)를 하더라도 online_sale 테이블에서 2021년 가입자 수가 나오게 됨

SELECT YEAR(os.sales_date) AS year,
    MONTH(os.sales_date) AS month, 
    COUNT(DISTINCT(os.user_id)) AS purchased_users,
    ROUND(COUNT(DISTINCT(os.user_id))/
         (SELECT COUNT(user_id) FROM user_info WHERE YEAR(joined) = 2021), 1) AS purchased_ratio

 

 

 

문제 바로가기(MySQL)

 

728x90
Comments