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

Ga0·2023년 5월 26일
0

programmers

목록 보기
12/14

상품을 구매한 회원 비율 구하기(JOIN - LEVEL5)

예시

USER_INFO 테이블이 다음과 같고

ONLINE_SALE 이 다음과 같다면

  • 2021년에 가입한 회원은 USER_ID가 1, 2, 3, 4 인 회원들로 총 4명 입니다. ONLINE_SALE 테이블에서 해당 회원들에 대한 판매 데이터는 다음과 같다.

년, 월 별로 상품을 구매한 회원수와 상품을 구매한 회원의 비율을 구하고 결과를 정렬하면 실행 결과는 다음과 같다.

SQL - MySQL

SELECT A.YEAR AS YEAR, -- 연도
       A.MONTH AS MONTH, -- 달
       COUNT(*) AS PUCHASED_USERS,
       -- USER_INFO 테이블에 있고, 등록한 연도가 2021인 모든 행을 센다.(= 2021년에 가입한 모든 회원)
       -- COUNT(*) : 해당 FROM에 있는 행의 개수를 모두 센다(즉, ONLINE으로 2021년에 구매한 회원의 정보를 조회해서 행을 카운트)
       -- 다시말해서, 2021년에 구매한 회원수/2021년에 가입한 모든 회원 수 => 2021년 구매한 회원 비율 (소수점 2자리수에서 반올림)
	   ROUND((COUNT(*)/ (SELECT COUNT(*) 
                            FROM USER_INFO 
                         WHERE YEAR(JOINED) = 2021)), 1) AS PUCHASED_RATIO
FROM ( -- 두테이블을 조합하여 새로운 테이블 만든다.
    SELECT DISTINCT -- YEAR, MONTH, USER_ID 조합이 중복이 없도록
        YEAR(S.SALES_DATE) AS YEAR, -- 연도만 따로 뺀다
        MONTH(S.SALES_DATE) AS MONTH,-- 월만 따로 뺀다
        U.USER_ID
    FROM ONLINE_SALE S
    JOIN USER_INFO U 
        ON S.USER_ID = U.USER_ID -- USER_ID기준으로 JOIN(연결)
        AND YEAR(U.JOINED) = 2021 -- 가입한 년도가 2021년 이고
) A

GROUP BY A.YEAR, A.MONTH -- 연도, 달의 두개 그룹화한다.
ORDER BY A.YEAR, A.MONTH

0개의 댓글