본문 바로가기
✔️ Algorithm/Programmars

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

by Eunse 2023. 9. 3.

https://school.programmers.co.kr/learn/courses/30/lessons/131534

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

✔️ 풀이

1. SELECT

 

   PURCHASED_USERS : 2021년에 가입한 전체 회원들 중, 상품을 구매한 회원의 수
   PURCHASED_RATIO : (2021년에 가입한 회원 중 상품을 구매한 회원 수) / (2021년에 가입한 회원 수) 
   YEAR : PURCHASED_USERS, PURCHASED_RATIO를 년 별로 출력
   MONTH : PURCHASED_USERS, PURCHASED_RATIO를 달별로 출력
  • 문제 조건에서 조회해야 할 값을 정리하면 위와 같다.
  •  PURCHASED_USERS와 PURCHASED_RATIO에서 USER_ID를 조회할 때는 ID값이 중복되어 COUNT 되지 않도록 DISTINCT를 추가해줘야 함을 주의하자.
  • PURCHASED_RATIO는 ROUND를 사용해 문제 조건에 맞게 소수점 두 번째 자리에서 반올림해 주기 위해 파라미터를 1로 설정하여 소수점 첫째 자리까지 표기한다.

2. FROM 

  • ONLINE_SALE 테이블 기준으로 USER_INFO 테이블과 LEFT JOIN하기 위해 ONLINE_SALE로 설정했다.

3. INNER JOIN

  • 2021년에 가입한 회원을 조회하기 위해서는 USER_INFO 테이블의 JOINED 값을 알아야 하므로, USER_ID값이 동일한 것 끼리 ONLINE_SALE 테이블을 기준으로 USER_INFO 테이블과 LEFT JOIN 한다.

4. WHERE

  • 2021년에 가입한 회원들 중에서 조회해야 하므로, YEAR(U.JOINED) = 2021로 설정한다.

5. GROUP BY

  • 문제 조건에서 년, 달 별로 조회해야 하므로 YEAR, MONTH로 각각 그룹화 한다.

6. ORDER BY

  • 전체 결과는 년을 기준으로 오름차순 정렬하며, 만약 년이 같으면 월을 기준으로 오름차순해야 정렬해 준다.

 

✔️ 코드

SELECT
    YEAR(O.SALES_DATE) AS YEAR,
    MONTH(O.SALES_DATE) AS MONTH,
    COUNT(DISTINCT U.USER_ID) AS PURCHASED_USERS,
    ROUND(COUNT(DISTINCT U.USER_ID) / (SELECT COUNT(*) FROM USER_INFO WHERE YEAR(JOINED) = 2021), 1) AS PURCHASED_RATIO
FROM ONLINE_SALE AS O
LEFT JOIN USER_INFO AS U ON O.USER_ID = U.USER_ID
WHERE YEAR(U.JOINED) = 2021
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;

댓글