프로그래머스 SQL Lv.5 상품을 구매한 회원 비율 구하기
문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
문제 접근 방식
- USER_INFO : 2021 년에 가입한 회원 목록 을 구한다.
- ONLINE_SALE 중 2021 년에 가입한 회원의 구매 목록 -> inner join
- ONLINE_SALE 을 YEAR, MONTH 년도, 월별로 통계를 낸 구매자(USER_ID)의 수(DISTINCT) -> GROUP BY YEAR MONTH
- 월별 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 |
댓글