[코딩테스트]/[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. 날짜가 이른 순으로 정렬