짜리몽땅 매거진
[SQL] solvesql 코딩테스트 연습5 본문
문제1. 쇼핑몰의 일일 매출액
출처 : solvesql 연습문제
문제 정보 : 난이도 2 / 정답률 55.27%
https://solvesql.com/problems/olist-daily-revenue/
정답 쿼리
select strftime('%Y-%m-%d', order_purchase_timestamp) as dt, round(sum(payment_value),2) as revenue_daily
from olist_orders_dataset a
join olist_order_payments_dataset b
on a.order_id = b.order_id
where dt >= '2018-01-01'
group by dt
order by dt
문제 해설
1. 주요 포인트 1 - select 절
select strftime('%Y-%m-%d', order_purchase_timestamp) as dt,
round(sum(payment_value),2) as revenue_daily
구매시각을 시각을 제외한 연-월-일 형식으로만 포맷팅해야하기 때문에 strftime 함수를 이용한다. mysql의 경우 date_format 함수를 사용하지만 solvesql에서는 sqlite 문법이 적용되므로 유의할 필요가 있다. 추가로 각 요일별 매출액 합계를 소수 둘째자리까지 반올림해 출력해야하므로 반올림하는 함수인 round와 sum을 사용한다.
2. 주요 포인트 2 - join
from olist_orders_dataset a
join olist_order_payments_dataset b
on a.order_id = b.order_id
구매시각 정보가 들어있는 olist_orders_dataset 과 매출액 정보가 나와있는 olist_order_payments_dataset 을 조인하여 구매 요일 별 매출액 합계를 도출하는 과정이 필요하다.
문제2. 작품이 없는 작가 찾기
출처 : solvesql 연습문제
문제 정보 : 난이도 3 / 정답률 66.41%
https://solvesql.com/problems/artists-without-artworks/
정답 쿼리
select a.artist_id, a.name
from artists a
where artist_id not in (select artist_id from artworks_artists) and death_year is not null
문제 해설
1. 주요 포인트 1 - where절 서브쿼리
where artist_id not in (select artist_id from artworks_artists) and death_year is not null
MoMa에 등록된 아티스트 중 작품 이력이 없으면서, 이미 사망한 아티스트를 출력해야한다. 따라서 서브쿼리를 사용해 작품이력이 있는 아티스트 id에 포함되지 않은 아티스트 id와 사망년도가 기록된(=null일 경우 아직 사망하지 않은) 경우를 조건절로 삽입해야 한다
'Data > SQL' 카테고리의 다른 글
[SQL] solvesql 코딩테스트 연습7 (0) | 2024.04.29 |
---|---|
[SQL] solvesql 코딩테스트 연습6 (0) | 2024.04.22 |
[SQL] solvesql 코딩테스트 연습4 (0) | 2024.04.09 |
[SQL] solvesql 코딩테스트 연습3 (0) | 2024.04.02 |
[SQL] solvesql 코딩테스트 연습2 (0) | 2024.03.26 |