[코딩테스트]/[SQL]

[StrataScratch - SQL] (Medium) Premium vs Freemium

잰잰' 2025. 5. 13. 18:01

문제

날짜별로 유료 사용자와 비유료 사용자의 총 다운로드 수를 구하세요. 비유료 사용자가 유료 사용자보다 더 많은 다운로드를 한 기록만 포함하세요. 출력은 가장 이른 날짜부터 정렬되어야 하며, 세 개의 열인 날짜, 비유료 다운로드 수, 유료 다운로드 수를 포함해야 합니다.

힌트: Oracle에서는 날짜 열을 참조할 때 "date"를 사용하세요 (예약어).

 

테이블설명

 

예상결과

 

✏️ 풀이

SELECT date,
        SUM(IF(paying_customer = 'no', downloads, 0)) AS non_paying,
        SUM(IF(paying_customer = 'yes', downloads, 0)) AS paying
FROM ms_download_facts AS d
JOIN ms_user_dimension AS u ON d.user_id = u.user_id
JOIN ms_acc_dimension AS a ON u.acc_id = a.acc_id
GROUP BY 1
HAVING non_paying > paying
ORDER BY 1 ASC;

1. SUM(IF(paying_customer = 'no/yes', downloads, 0)) 비유료, 유료 사용자 다운로드 수 구하기

2. HAVING 으로 비유료 다운로드 수가 많은 데이터만 조회

3. 날짜가 이른 순으로 정렬