[SQL 문제 풀이] 상품을 구매한 회원 비율 구하기

프로그래머스 (131534)
Stupefyee's avatar
Mar 13, 2025
[SQL 문제 풀이] 상품을 구매한 회원 비율 구하기
notion image
notion image
 

내가 작성한 쿼리

Oracle

-- 1. 온라인 판매 테이블(OS)에서 판매 날짜의 연도(YEAR)와 월(MONTH)을 추출 SELECT EXTRACT(YEAR FROM OS.SALES_DATE) AS YEAR, -- 판매 날짜의 연도 추출 (오라클 방식) EXTRACT(MONTH FROM OS.SALES_DATE) AS MONTH, -- 판매 날짜의 월 추출 (오라클 방식) -- 2. 2021년에 가입한 회원 중 실제 구매한 회원 수를 세기 (중복 제거) COUNT(DISTINCT OS.USER_ID) AS PURCHASED_USERS, -- 3. 구매한 회원 수를 2021년에 가입한 전체 회원 수로 나눠 비율 계산, 소수점 첫째 자리 반올림 ROUND( (COUNT(DISTINCT OS.USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE EXTRACT(YEAR FROM JOINED) = 2021)), 1 ) AS PURCHASED_RATIO -- 4. 사용할 테이블: ONLINE_SALE 별칭(OS) FROM ONLINE_SALE OS -- 5. 2021년에 가입한 회원(USER_INFO 테이블 기준)에 해당하는 USER_ID만 추출 WHERE OS.USER_ID IN (SELECT USER_ID FROM USER_INFO WHERE EXTRACT(YEAR FROM JOINED) = 2021) -- 6. 연도, 월별 그룹화 GROUP BY EXTRACT(YEAR FROM OS.SALES_DATE), EXTRACT(MONTH FROM OS.SALES_DATE) -- 7. 연도, 월 오름차순 정렬 ORDER BY YEAR, MONTH;

MySQL

-- 1. 온라인 판매 테이블(OS)에서 판매 날짜의 연도(YEAR)와 월(MONTH)을 추출 SELECT YEAR(OS.SALES_DATE) YEAR, -- 판매 날짜의 연도 추출 MONTH(OS.SALES_DATE) MONTH, -- 판매 날짜의 월 추출 -- 2. 2021년에 가입한 회원 중 실제 구매한 회원 수를 세기 (중복 제거) COUNT(DISTINCT OS.USER_ID) PURCHASED_USERS, -- 3. 구매한 회원 수를 2021년에 가입한 전체 회원 수로 나눠 비율 계산, 소수점 첫째 자리 반올림 ROUND( (COUNT(DISTINCT OS.USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021)), 1 ) PURCHASED_RATIO -- 4. 사용할 테이블: ONLINE_SALE 별칭(OS) FROM ONLINE_SALE OS -- 5. 2021년에 가입한 회원(USER_INFO 테이블 기준)에 해당하는 USER_ID만 추출 WHERE OS.USER_ID IN (SELECT USER_ID FROM USER_INFO WHERE YEAR(JOINED) = 2021) -- 6. 연도, 월별 그룹화 GROUP BY YEAR, MONTH -- 7. 연도, 월 오름차순 정렬 ORDER BY YEAR, MONTH;

차이점

  • 오라클에서는 YEAR(), MONTH() 함수가 없고, EXTRACT() 함수를 사용하여 추출
Share article

stupefyee