본문 바로가기

SQL

[프로그래머스 JOIN] 상품을 구매한 회원 비율 구하기

코딩테스트 연습 - 상품을 구매한 회원 비율 구하기 | 프로그래머스 스쿨 (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%' 로 쿼리 짬(이것또한 가능)