https://school.programmers.co.kr/learn/courses/30/lessons/131534
• 풀이
2021년도에 가입한 유저 ID, 유저수를 USER_INFO에서 빼온다
둘이 동시에 빼오지는 못해서 각각 서브쿼리로 빼오고
-- 2021 가입한 유저 ID
( SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%') U
-- 2021 가입한 유저 수
(
SELECT COUNT(USER_ID) CNT
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%'
구매기록 테이블과 조인해서 가져오기 위해서 유저 아이디를 조인, 유저 수는 계속 필요하니 크로스 조인하고 월과 년을 빼오기 위해서 EXTRACT를 사용했다
해당 방식으로 컬럼에서월,년 데이터를 빼온다
EXTRACT(YEAR FROM SALES_DATE)
EXTRACT(MONTH FROM SALES_DATE)
문제 조건이 년가 월을 각각 조건으로 해서 그룹을 해줘야 하고, 크로스 조인한 2021년도 회원수도 그룹하는데 사용한다
GROUP BY EXTRACT(YEAR FROM SALES_DATE), EXTRACT(MONTH FROM SALES_DATE), C.CNT
SELECT EXTRACT(YEAR FROM SALES_DATE) YEAR,
EXTRACT(MONTH FROM SALES_DATE) MONTH,
COUNT(DISTINCT O.USER_ID) PURCHASED_USERS,
ROUND(COUNT(DISTINCT O.USER_ID) / C.CNT,1) PUCHASED_RATIO
FROM
ONLINE_SALE O
JOIN
-- 2021 가입한 유저 ID
( SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%') U
ON U.USER_ID = O.USER_ID
CROSS JOIN
-- 2021 가입한 유저 수
(
SELECT COUNT(USER_ID) CNT
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') LIKE '2021%'
) C
GROUP BY EXTRACT(YEAR FROM SALES_DATE), EXTRACT(MONTH FROM SALES_DATE), C.CNT
ORDER BY YEAR, MONTH
'SQL' 카테고리의 다른 글
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 - 그룹바이 (0) | 2024.12.10 |
---|---|
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 - 조인 (0) | 2024.12.09 |
그룹별 조건에 맞는 식당 목록 출력하기 - 프로그래머스 (1) | 2024.12.03 |
오프라인/온라인 판매 데이터 통합하기 (0) | 2024.11.22 |
조건에 맞는 회원수 구하기(DATE 문자열 변환) (0) | 2024.11.19 |