[SQL 프로그래머스 JOIN] 상품을 구매한 회원 비율 구하기 (ORCALE, MYSQL)
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체
9566.tistory.com

정답
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 |