💡문제


처음 제출한 코드
SELECT YEAR(O.sales_date), MONTH(O.sales_date), COUNT(U.user_id) AS PUCHASED_USERS
FROM user_info U JOIN online_sale O ON U.user_id = O.user_id
WHERE Year(U.joined) = 2021
GROUP BY YEAR(O.sales_date), MONTH(O.sales_date)
상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수) 테이블 필요

정답 코드
# 1 - WITH문
WITH rate AS (SELECT COUNT(DISTINCT user_id) rate_user -- 2021년에 가입한 회원수
FROM user_info
WHERE YEAR(joined)=2021)
SELECT YEAR(O.sales_date) YEAR, MONTH(O.sales_date) MONTH
, COUNT(DISTINCT O.user_id) AS PUCHASED_USERS -- 상품구매한 회원수
, ROUND(COUNT(DISTINCT O.user_id) / (SELECT rate_user -- rate 테이블 이용
FROM rate), 1) AS PUCHASED_RATIO
FROM user_info U JOIN online_sale O ON U.user_id = O.user_id
WHERE YEAR(U.joined) = 2021
GROUP BY YEAR, MONTH -- 혹은 1,2
ORDER BY YEAR, MONTH
# 2 - WITH문 없이
SELECT YEAR(O.sales_date) YEAR, MONTH(O.sales_date) MONTH
, COUNT(DISTINCT O.user_id) AS PUCHASED_USERS
, ROUND(COUNT(DISTINCT O.user_id) / (SELECT COUNT(DISTINCT user_id) rate_user
FROM user_info
WHERE YEAR(joined)=2021), 1) AS PUCHASED_RATIO
FROM user_info U JOIN online_sale O ON U.user_id = O.user_id
WHERE YEAR(U.joined) = 2021
GROUP BY YEAR, MONTH -- 1,2
ORDER BY YEAR, MONTH
# 3
SELECT YEAR, MONTH
, COUNT(*) AS PUCHASED_USERS
, ROUND((COUNT(*)/ (SELECT COUNT(*)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021)), 1) AS PUCHASED_RATIO
FROM (
SELECT DISTINCT YEAR(O.sales_date) AS YEAR, MONTH(O.sales_date) AS MONTH, U.user_id
FROM USER_INFO U JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID AND YEAR(joined) = 2021
) A
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
'🛠️Skill > CodingTest' 카테고리의 다른 글
[프로그래머스] Lv3. 오랜 기간 보호한 동물(1) (2) / LEFT JOIN (0) | 2022.12.05 |
---|---|
[프로그래머스] Lv3. 있었는데요 없었습니다 / 없어진 기록 찾기 (0) | 2022.12.01 |
[프로그래머스] Lv3. 헤비 유저가 소유한 장소 (0) | 2022.11.27 |
[프로그래머스] Lv3. 조건별로 분류하여 주문상태 출력하기 (0) | 2022.11.24 |
[프로그래머스] Lv4. 입양 시각 구하기(2) / SET (0) | 2022.11.21 |
댓글