안녕하세요!
이번 포스팅은 프로그래머스 코딩테스트 연습에 있는 "상품을 구매한 회원 비율 구하기" 문제를 OracleDB로 풀어보려고 합니다!
(모든 문제는 Oracle로 풀이하겠습니다.)
1. 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131534
2. 문제
USER_INFO 테이블
| NAME | TYPE | NULLABLE | INFO |
| USER_ID | INTEGER | FALSE | 회원 ID |
| GENDER | TINYINT(1) | TRUE | 성별 |
| AGE | INTEGER | TRUE | 나이 |
| JOINED | DATE | FALSE | 가입일 |
ONLINE_SALE 테이블
| NAME | TYPE | NULLABLE | INFO |
| ONLINE_SALE_ID | INTEGER | FALSE | 온라인 상품 판매 ID |
| USER_ID | INTEGER | FALSE | 회원 ID |
| PRODUCT_ID | INTEGER | FALSE | 상품 ID |
| SALES_AMOUNT | INTEGER | FALSE | 판매량 |
| SALES_DATE | DATE | FALSE | 판매일 |
[문제] USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
3. 제출 쿼리 및 설명
SELECT
EXTRACT(YEAR FROM O.SALES_DATE) AS YEAR,
EXTRACT(MONTH FROM O.SALES_DATE) AS MONTH,
COUNT(DISTINCT O.USER_ID) AS PUCHASED_USERS,
ROUND(COUNT(DISTINCT O.USER_ID) / (SELECT COUNT(USER_ID)
FROM USER_INFO
WHERE EXTRACT(YEAR FROM JOINED) = 2021),1) AS PUCHASED_RATIO
FROM USER_INFO U, ONLINE_SALE O
WHERE U.USER_ID = O.USER_ID
AND EXTRACT(YEAR FROM U.JOINED) = 2021
GROUP BY
EXTRACT(YEAR FROM O.SALES_DATE),
EXTRACT(MONTH FROM O.SALES_DATE)
ORDER BY
YEAR,
MONTH
'SQL > 프로그래머스' 카테고리의 다른 글
| [SQL] 재구매가 일어난 상품과 회원 리스트 구하기(프로그래머스/Oracle) (0) | 2023.10.14 |
|---|---|
| [SQL] 조건에 맞는 회원수 구하기(프로그래머스/Oracle) (0) | 2023.10.14 |
| [SQL] 상품 별 오프라인 매출 구하기(프로그래머스/Oracle) (0) | 2023.10.14 |
| [SQL] 년, 월, 성별 별 상품 구매 회원 수 구하기(프로그래머스/Oracle) (0) | 2023.10.14 |
| [SQL] 가격대 별 상품 개수 구하기(프로그래머스/Oracle) (0) | 2023.10.14 |