USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/131534
WITH users AS ( -- 2021에 가입한 회원 추출
SELECT *
FROM USER_INFO
WHERE JOINED LIKE '2021%'
)
SELECT
YEAR(os.sales_date) AS YEAR, -- 구매한 년도
MONTH(os.sales_date) AS MONTH, -- 구매한 월
count(DISTINCT os.USER_ID) AS PURCHASED_USERS, -- 월별 상품을 구매한 회원 수 (중복X) 월별
-- 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수
ROUND((count(DISTINCT os.USER_ID) / count(u.USER_ID)), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE os
INNER JOIN users u
ON
os.USER_ID = u.USER_ID
GROUP BY
MONTH(os.sales_date)
ORDER BY
YEAR(os.sales_date), MONTH(os.sales_date)
WITH users AS ( -- 2021에 가입한 회원 추출
SELECT
*,
(SELECT COUNT(*)
FROM USER_INFO
WHERE JOINED LIKE '2021%') as cnt -- 2021년에 가입한 전체 회원 수 카운트
FROM USER_INFO
WHERE JOINED LIKE '2021%'
)
SELECT
YEAR(os.sales_date) AS YEAR, -- 구매한 년도
MONTH(os.sales_date) AS MONTH, -- 구매한 월
count(DISTINCT os.USER_ID) AS PURCHASED_USERS, -- 월별 상품을 구매한 회원 수 (중복X) 월별
-- 2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수
ROUND((count(DISTINCT os.USER_ID) / u.cnt), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE os
INNER JOIN users u
ON
os.USER_ID = u.USER_ID
GROUP BY
MONTH(os.sales_date)
ORDER BY
YEAR(os.sales_date), MONTH(os.sales_date)
(SELECT COUNT(*) FROM users)을 통해 해결하려고 했지만 쿼리가 너무 복잡해보였다...