본문 바로가기

IT/SQL

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

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

 

프로그래머스

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

programmers.co.kr

 

문제를 간략하게 요약하자면, 2021년에 가입한 회원 중 상품을 구매한 회원수, 구매 비율을 년 월로 출력하는 문제이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      SELECT SUBSTR(TO_CHAR(OS.SALES_DATE, 'YYYYMMDD'), 14) YEAR
            ,TO_NUMBER(SUBSTR(TO_CHAR(OS.SALES_DATE, 'YYYYMMDD'), 52)) MONTH
            ,COUNT(DISTINCT UI.USER_ID) PERCHASED_USERS
            ,ROUND(COUNT(DISTINCT UI.USER_ID) /
                      (
                       SELECT COUNT(USER_ID)
                         FROM USER_INFO UI2
                        WHERE SUBSTR(TO_CHAR(UI2.JOINED, 'YYYYMMDD'), 14= '2021' 
                      )
                   , 1) PURCHASED_RATIO
        FROM USER_INFO UI
  INNER JOIN ONLINE_SALE OS ON OS.USER_ID = UI.USER_ID
       WHERE SUBSTR(TO_CHAR(UI.JOINED, 'YYYYMMDD'), 14= '2021' 
    GROUP BY SUBSTR(TO_CHAR(OS.SALES_DATE, 'YYYYMMDD'), 14)
            ,TO_NUMBER(SUBSTR(TO_CHAR(OS.SALES_DATE, 'YYYYMMDD'), 52))
    ORDER BY 1 ASC, 2 ASC
cs

2021년도 가입한 총 인원을 스칼라로 구하는 게 좋은 방법은 아닌 것 같다. 

(2021 년도로 고정해서 1년만 본다 치면 12번 계산하면 되니까 큰 문제는 아니겠지만 조회하는 월이 많아지면 속도 이슈가 생기지 않을까 싶다. WITH 절로 빼던가 하는 수정이 필요할 것 같다) 

 

당시에 딱 한 명만 풀었던 문제라 나도 빨리 풀고 싶어서 일단 되는대로 풀었다...! ㅋㅋ 

지금은 푼 사람이 많지만 그래도 나름 뿌듯했다!