반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 내용
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
해결 방법
이 문제는 구매기록 테이블에서 연도, 달로 그룹화를 통해 문제를 해결했습니다.
- 2021년 사이에 가입한 사람들의 USER_ID가 ONLINE_SALE 에 있는지 확인
- GROUP BY를 이용해 YEAR, MONTH에 해당하는 그룹화
- 카운트 및 구매율 계산
(2021년 가입한 회원 중 YEAR,MONTH에 구입 기록이 있는 회원들 모두 카운트) AS PURCHASED_USERS
(2021년 가입한 회원 중 YEAR,MONTH에 구입 기록이 있는 회원들 모두 카운트) / (2021년 가입한 회원) 을 ROUND
해결 쿼리문
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT USER_ID) AS PURCHASED_USERS ,
ROUND(COUNT(DISTINCT USER_ID) / (SELECT COUNT(USER_ID)
FROM USER_INFO
WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01'),1) AS PUCHASED_RATIO
FROM ONLINE_SALE
WHERE USER_ID IN (SELECT USER_ID
FROM USER_INFO
WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01')
GROUP BY YEAR, MONTH
ORDER BY YEAR ASC, MONTH ASC
;
YEAR(SALES_DATE) AS 연도, MONTH(SALES_DATE) AS MONTH, COUNT(DISTINCT USER_ID) AS PURCHASED_USERS , ROUND(COUNT(DISTINCT USER_ID) / (SELECT COUNT(USER_ID) FROM USER_INFO WHERE JOINED BETWEEN '2020-12-31' AND '2022-01-01'),1) USER_ID가 있는 ONLINE_SALE의 PUCHASED_RATIO('2020-12-31' 및 '2022-01-01' 사이에 결합된 USER_INFO에서 USER_ID 선택) 연도별 그룹, 연도별 월별 순서 ASC, 월 ASC ;