코딩테스트 연습 - 상품을 구매한 회원 비율 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
답:
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(DISTINCT A.USER_ID) AS PURCHASED_USERS,
ROUND(COUNT(DISTINCT A.USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = '2021'), 1) AS PURCHASED_RATIO
FROM USER_INFO A RIGHT JOIN ONLINE_SALE B
ON A.USER_ID = B.USER_ID
WHERE YEAR(JOINED) = '2021'
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH
헷갈렸던 개념 :
Q. WHERE 부분에 2021년 가입자를 추출했는데 왜 SELECT 부분 비율 구할 시 2021년 가입자를 또 추출하지?
A. 쿼리 순서가 FROM 부터 시작 -> 조인 시 구매 이력이있는 가입자가 추출 -> WHERE 문을 통해 구매이력이 있는 2021년 가입자가 추출 됨 -> SO. 이대로 COUNT(A.USER ID)하면 2021년 전체 가입자가 아닌 구매이력이 있는 2021년 가입자만 나옴
아이디어 :
반올림 : ROUND(값, 1)
YEAR(속성) = '2021' / MONTH(속성)함수로 날짜 추출가능
처음에는 JOINED LIKE '2021%' 로 쿼리 짬(이것또한 가능)
'SQL' 카테고리의 다른 글
[프로그래머스 GROUP BY] 카테고리 별 도서 판매량 집계하기 (0) | 2023.04.18 |
---|---|
[프로그래머스 GROUP BY] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.04.17 |
[프로그래머스 JOIN] 상품 별 오프라인 매출 구하기 (0) | 2023.04.13 |
[프로그래머스 JOIN] 보호소에서 중성화한 동물 (0) | 2023.04.12 |
[프로그래머스 JOIN] 오랜 기간 보호한 동물(1) (0) | 2023.04.12 |