정답
SELECT TO_CHAR(SALES_DATE,'YYYY') YEAR
,TO_NUMBER(TO_CHAR(SALES_DATE,'MM')) MONTH
,COUNT(DISTINCT(USER_ID)) PURCHASED_USERS
,ROUND(COUNT(DISTINCT(USER_ID))/(
SELECT COUNT(USER_ID)
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') ='2021'
),1) PUCHASED_RATIO
FROM ONLINE_SALE
WHERE USER_ID IN (
SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
)
GROUP BY TO_CHAR(SALES_DATE,'YYYY'),TO_CHAR(SALES_DATE,'MM')
ORDER BY 1,2
풀이
USER_INFO 테이블에서 2021년에 가입한 전체 회원 USER_ID
SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
SELECT *
FROM ONLINE_SALE
WHERE USER_ID IN (
SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
)
- USER_ID 중복된것이 있기 때문에 DISTINCT 사용해야 된다.
SELECT TO_CHAR(SALES_DATE,'YYYY')
,TO_CHAR(SALES_DATE,'MM')
FROM ONLINE_SALE
WHERE USER_ID IN (
SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
)
GROUP BY TO_CHAR(SALES_DATE,'YYYY'),TO_CHAR(SALES_DATE,'MM')
SELECT TO_CHAR(SALES_DATE,'YYYY') YEAR
,TO_NUMBER(TO_CHAR(SALES_DATE,'MM')) MONTH
,COUNT(DISTINCT(USER_ID)) PURCHASED_USERS
,ROUND(COUNT(DISTINCT(USER_ID))/(
SELECT COUNT(USER_ID)
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') ='2021'
),1) PUCHASED_RATIO
FROM ONLINE_SALE
WHERE USER_ID IN (
SELECT USER_ID
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
)
GROUP BY TO_CHAR(SALES_DATE,'YYYY'),TO_CHAR(SALES_DATE,'MM')
'DB > 프로그래머스' 카테고리의 다른 글
[Oracle] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.10.13 |
---|---|
[Oracle] 우유와 요거트가 담긴 장바구니 (0) | 2024.10.12 |
[Oracle] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.10.11 |
[Oracle] 5월 식품들의 총매출 조회하기 (0) | 2024.10.10 |
[Oracle] 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2024.10.07 |