Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

하루에 하나씩 공부하기

상품을 구매한 회원 비율 구하기-LV5 본문

SQL 코딩테스트/LV5

상품을 구매한 회원 비율 구하기-LV5

dltaexox 2025. 2. 11. 16:45

- 문제

USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.

 

코딩테스트 연습 - 상품을 구매한 회원 비율 구하기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 키포인트

2021년 가입한 회원자와, 2021년 가입한 회원 중 상품을 구매한 회원자를 잘 구별하기

 

- 코드

WITH JOIN_2021 AS (
SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED)=2021)

SELECT YEAR(O.SALES_DATE) AS YEAR , MONTH(O.SALES_DATE) AS MONTH,
COUNT(DISTINCT(O.USER_ID)) AS PURCHASED_USERS, 
ROUND(COUNT(DISTINCT(O.USER_ID))/COUNT(DISTINCT(J.USER_ID)),1) AS PUCHASED_RATIO
FROM ONLINE_SALE O, JOIN_2021 J
WHERE O.USER_ID IN (
SELECT USER_ID
FROM JOIN_2021)
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;

우선 2021년 가입한 회원자를 CTE로 JOIN_2021 이름으로 생성함

WHERE절 :

이후 JOIN_2021에 있는 ID만을 가지는 ONLINE_SALE의 구매 회원 필터링 > 2021년 가입한 회원 중 상품을 구매한 사람

DISTINCT(O.USER_ID) : 2021년 가입한 회원 중 상품을 구매한 사람

DISTINCT(J.USER_ID) : 2021년 가입한 회원

SELECT year(sales_date) as year,month(sales_date) as month, count(distinct user_id) as puchased_users,
round(count(distinct user_id)/(select count(*) from user_info where year(joined)=2021),1) as puchased_ratioㅎ
from online_sale
where user_id in (select user_id from user_info where year(joined) = 2021)
group by year(sales_date),month(sales_date)
order by year,month