SQL/SQL test

[Programmers] 상품을 구매한 회원 비율 구하기

ISLA! 2024. 4. 9. 15:22

문제 

2021년에 가입한 전체 회원들 중 상품을 구매한 회원수상품을 구매한 회원의 비율

👉 (=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성

- 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 
- 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬할 것!

 

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

 

프로그래머스

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

programmers.co.kr


풀이

1. 회원ID를 기준으로 두 테이블을 조인하고,

2. WHERE 절에 가입연도 2021년 조건을 걸어준다

3. SELECT 절에, 연 & 월을 추출해서 GROUP BY 기준으로 지정하고

4. 구매자 수를 구하기 위해 조인 결과에서 DISTINCT한 유저 수를 COUNT 한다

5. 전체 유저수를 4의 유저수로 나누기 위해 서브쿼리를 사용한다.(이때도 가입연도 조건을 꼭 걸어줘야 정확히 집계됨)
    → 아래 쿼리 참고

SELECT COUNT(*)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021

 

🎯 최종 쿼리

SELECT
    YEAR(SALES_DATE) AS YEAR,
    MONTH(SALES_DATE) AS MONTH,
    -- 조인 결과에서 online_sale의 user_id 수(고윳값)이 구매자 수
    COUNT(DISTINCT o.USER_ID) AS PUCHASED_USERS,
   -- 전체 유저 수를 구하기 위해 서브쿼리 사용
    ROUND(COUNT(DISTINCT o.USER_ID)/(SELECT COUNT(*)
                                    FROM USER_INFO
                                    WHERE YEAR(JOINED) = 2021), 1) AS PUCHASED_RATIO
FROM ONLINE_SALE AS o
-- 회원ID 기준으로 조인
LEFT JOIN USER_INFO AS u
ON o.USER_ID = u.USER_ID
WHERE YEAR(u.JOINED) = 2021 #가입연도 2021 조건
GROUP BY
    YEAR,
    MONTH
ORDER BY 
    YEAR,
    MONTH
728x90