«   2024/06   »
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 코딩테스트 연습9 본문

Data/SQL

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

쿡국 2024. 5. 27. 22:37

문제1.  두 테이블 결합하기

출처 : solvesql 연습문제

문제 정보 : 난이도 2 / 정답률 31.18%

https://solvesql.com/problems/join/

 

https://solvesql.com/problems/join/

 

solvesql.com

 

정답 쿼리

select DISTINCT
  athlete_id
from
  records a
  join events b on a.event_id = b.id
where
  b.sport = 'Golf'

 

문제 해설


문제2.  버뮤다 삼각지대에 들어가버린 택배

출처 : solvesql 연습문제

문제 정보 : 난이도 2 / 정답률 35.35%

https://solvesql.com/problems/shipment-in-bermuda/

 

https://solvesql.com/problems/shipment-in-bermuda/

 

solvesql.com

 

정답 쿼리

SELECT strftime('%Y-%m-%d', order_delivered_carrier_date) AS delivered_carrier_date, 
       COUNT(order_id) AS orders
FROM olist_orders_dataset
WHERE strftime('%Y-%m', order_delivered_carrier_date) = '2017-01'
  AND order_delivered_carrier_date IS NOT NULL 
  AND order_delivered_customer_date IS NULL
GROUP BY delivered_carrier_date
ORDER BY delivered_carrier_date;

 

문제 해설

 

1. 주요 포인트 1 - where절 날짜 조건

WHERE strftime('%Y-%m', order_delivered_carrier_date) = '2017-01'

 

 

2017년 1월의 데이터만 가져와야하는데, order_delivered_carrier_date 값은 문자열이 아닌 날짜 형식으로 되어있기 때문에 그냥 order_delivered_carrier_date = '2017-01%' 과 같은 방식으로 작성하면 빈 테이블이 출력된다. 따라서 날짜를 년-월 문자열 형식으로 포맷팅 후, 2017년 1월에 해당한다는 의미로 쿼리를 작성하면 원하는 테이블을 출력할 수 있다.