«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[SQL] solvesql 코딩테스트 연습5 본문

Data/SQL

[SQL] solvesql 코딩테스트 연습5

쿡국 2024. 4. 15. 13:06

 

문제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일 경우 아직 사망하지 않은) 경우를 조건절로 삽입해야 한다