반응형
1. 문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요.
*문제 원본은 '문제링크' 참고
2. 학습 내용
1) SELECT절에서 조건문(CASE)을 이용한 컬럼 조회
2) LEFT JOIN 을 이용한 컬럼 조회
3) ROUND 함수를 이용한 데이터 소수점 조정
*회원의 비율 계산식은 문제에서 친절하게 제공해줌
🔎 3. 작성 코드
-- 코드를 입력하세요
SELECT
YEAR(SALES_DATE) AS YEAR, -- 연도
MONTH(SALES_DATE) AS MONTH, -- 월
COUNT(DISTINCT CASE WHEN YEAR(JOINED) = 2021 THEN USER_INFO.USER_ID END) AS PURCHASED_USERS,
-- CASE문 이용하여 가입연도 2021인 경우에만 USER_ID 카운팅
-- 구매한 회원으로 인식할 수 있는 이유: WHERE 절에서 SALES_DATE IS NOT NULL 설정
ROUND(COUNT(DISTINCT CASE WHEN YEAR(JOINED) = 2021 THEN USER_INFO.USER_ID END) / (SELECT COUNT(DISTINCT USER_ID) FROM USER_INFO WHERE YEAR(JOINED) = 2021), 1) AS PURCHASED_RATIO
-- 분자(2021년 구매자 수): 위에서 구한 구매자 수 그대로 사용
-- 분모(2021년 가입자 수): USER_INFO 테이블에서 가입연도 2021인 회원 COUNT
FROM
USER_INFO
LEFT JOIN ONLINE_SALE ON USER_INFO.USER_ID = ONLINE_SALE.USER_ID
WHERE
YEAR(JOINED) = 2021 AND SALES_DATE IS NOT NULL
-- 조건1: 2021년 가입, 조건2: SALES_DATE 존재
GROUP BY
YEAR(SALES_DATE),
MONTH(SALES_DATE)
ORDER BY
YEAR,
MONTH;
반응형
'프로그래머스' 카테고리의 다른 글
SQL - 자동차 대여 기록 별 대여 금액 구하기_String, Date (0) | 2023.05.25 |
---|---|
코딩테스트 입문 - 평행 (0) | 2023.05.24 |
SQL - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기_JOIN (0) | 2023.05.22 |
코딩테스트 입문 - 옹알이_JAVA (0) | 2023.05.19 |
SQL - 보호소에서 중성화한 동물_JOIN (0) | 2023.05.19 |