연속적인 데이터를 탐색할 때 기존에 가지고 있던 도구(ex: select, join)들로는 해결이 안되었다. id를 순차적으로 검색하려면 SQL의 반복문 문법을 가져다 써야하나 생각했는데 해답을 보니 굉장히 띵한 방법이 있다.
# Write your MySQL query statement below
SELECT Weather.Id Id
FROM
Weather
JOIN
Weather w ON DATEDIFF(weather.RecordDate, w.RecordDate) = 1
AND weather.Temperature > w.Temperature
;
요구사항은 날짜가 연속된 데이터 중 전날에 비해 온도가 높아진 날의 Id를 출력한다. cartesian product를 한 다음 조건에 DATEDIFF로 연속적인 데이터를 가져오도록 한다. 이어지는 조건에서 온도가 높으면 Id를 출력하도록 만들어 요구사항을 충족시킨다.
문제: Consecutive Available Seats
# Write your MySQL query statement below
select distinct a.seat_id
from cinema a join cinema b
on abs(a.seat_id - b.seat_id) = 1
and a.free = true and b.free = true
order by a.seat_id
;
Consecutive Available Seats 문제도 마찬가지다. cartesian product를 하고 이어지는 조건에서 free가 연속적으로 생기면 seat_id값을 출력한다.
다만, 이런 성격의 문제는 연속적이기에 슬라이딩 윈도우로 O(N^2)을 O(N)으로 바꿀 수 있는 문제다. 내부 동작은 정확히 모르지만 dumb한 접근으로 O(N^2)을 가져간다고 할 때 비효율적인 방법이 될 수 있다. 연속적인 데이터를 처리할 때 [cartesian product 후 연속 조건 and 문제 조건] 의 형식으로 접근하는 방법을 알아둔다.
'* Computer Science > database' 카테고리의 다른 글
중간 정리 (0) | 2020.06.23 |
---|---|
스토어드 프로시저? (0) | 2020.06.21 |
secondary index 적용 시 analyze 명령어 사용 (0) | 2020.06.21 |
제약 조건(Constraint) (0) | 2020.06.18 |
keyword check (0) | 2020.06.02 |