[프로그래머스] MySQL / 상품을 구매한 회원 비율 구하기
2024. 1. 13. 15:09ㆍCoding/프로그래머스-SQL
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/131534
문제
코드
-- 코드를 입력하세요
SELECT YEAR, MONTH, COUNT(*) AS PURCHASED_USERS, ROUND((COUNT(*)/(SELECT COUNT(*)
FROM USER_INFO WHERE YEAR(JOINED) = 2021)), 1) AS PURCHASED_RATIO
FROM (
SELECT DISTINCT YEAR(O.SALES_DATE) AS YEAR, MONTH(O.SALES_DATE) AS MONTH, U.USER_ID
FROM ONLINE_SALE O
JOIN USER_INFO U ON O.USER_ID = U.USER_ID AND YEAR(JOINED) = 2021) A
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;
1. ROUND() 함수가 있는 위치가 SELECT 절이라는 것에 주목한다. SELECT 절은 서브쿼리를 넣을 수 있는 위치이다. 따라서 ROUND() 함수 안에 서브쿼리를 생성해서 집어넣을 수 있다. 이때 이 서브쿼리에서는 2021년에 가입한 전체 회원수가 출력되도록 한다.
2. FROM 절에 또 하나의 서브쿼리를 생성해준다. 생성해야 할 서브쿼리가 많아서 이 문제의 레벨이 가장 높은 것으로 추정이 된다. FROM절에서 생성된 서브쿼리에선 년, 월, 그리고 회원을 출력한다. 이때 년도는 구별이 되어야 하므로 DISTINCT를 사용한다.
3. FROM절에 사용된 서브 쿼리 안에서 JOIN을 실시해준다. 어떤 회원이 어떤 상품을 구매했는지 연결이 되어야 하므로 INNER JOIN을 사용해주는게 상황상 맞다.
'Coding > 프로그래머스-SQL' 카테고리의 다른 글
[프로그래머스] MySQL / 상품 별 오프라인 매출 구하기 (0) | 2024.01.13 |
---|---|
[프로그래머스] MySQL / 보호소에서 중성화한 동물 (0) | 2024.01.13 |
[프로그래머스] MySQL / 오랜 기간 보호한 동물(1) (0) | 2024.01.13 |
[프로그래머스] MySQL / 있었는데요 없었습니다 (0) | 2024.01.13 |
[프로그래머스] MySQL / 없어진 기록 찾기 (0) | 2024.01.12 |