문제링크
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/131534#qna
풀이
1. 가장 먼저 USER_INFO 테이블에서 2021년에 가입한 회원 전체 수를 구하는 쿼리를 작성해봤다.
2. USER_INFO 테이블과 ONLINE_SALE 테이블을 JOIN 해서 2021년에 가입한 회원수 조건으로 년도,월별,사용자 아이디 GROUP BY 기준으로 조회를 했다.
3. 년도,월별 기준으로 사용자아이디를 카운트하고 전체 회원수를 구하는 SELECT 문을 서브쿼리로 작성하여 컬럼에 붙였다
4. 월별 구매한 회원 카운트에 전체 회원수를 나누고 ROUND를 써서 소수 둘째자리에서 반올림하였다.
5. 년을 기준 오름차순 , 월 기준 오름차순으로 ORDER BY 했다.
쿼리
SELECT
YY AS YEAR,
TO_NUMBER(MM) AS MONTH,
CNT AS PUCHASED_USERS,
ROUND(CNT/CC,1) AS PUCHASED_RATIO
FROM
(
SELECT
YY,
MM,
COUNT(USER_ID) AS CNT,
(
SELECT
SUM(COUNT(USER_ID))
FROM
USER_INFO
WHERE TO_CHAR(JOINED,'YYYY') = '2021'
GROUP BY USER_ID
) AS CC
FROM (
SELECT
TO_CHAR(SALES_DATE,'YYYY') AS YY
, TO_CHAR(SALES_DATE,'MM') AS MM
, B.USER_ID
FROM
USER_INFO A
,ONLINE_SALE B
WHERE
A.USER_ID = B.USER_ID
AND TO_CHAR(A.JOINED,'YYYY') = '2021'
GROUP BY TO_CHAR(SALES_DATE,'YYYY') , TO_CHAR(SALES_DATE,'MM') , B.USER_ID
) C
GROUP BY YY , MM
) ORDER BY YY ASC , MM ASC ;
'SQL' 카테고리의 다른 글
[SQL 문제풀이] 식품분류별 가장 비싼 식품의 정보 조회하기-프로그래머스 (0) | 2023.04.13 |
---|---|
[SQL 문제풀이] 년, 월, 성별 별 상품 구매 회원 수 구하기-프로그래머스 (0) | 2023.04.13 |
[SQL 문제풀이] 식품분류별 가장 비싼 식품의 정보 조회하기-프로그래머스 (0) | 2023.04.13 |
[SQL 문제풀이] 입양 시각 구하기(2)-프로그래머스 (0) | 2023.04.12 |
[SQL 문제풀이] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기-프로그래머스 (0) | 2023.04.12 |