* Computer Science/database

SQL 연속적인 데이터 다루기

soicem 2020. 6. 20. 10:30

 연속적인 데이터를 탐색할 때 기존에 가지고 있던 도구(ex: select, join)들로는 해결이 안되었다.  id를 순차적으로 검색하려면 SQL의 반복문 문법을 가져다 써야하나 생각했는데 해답을 보니 굉장히 띵한 방법이 있다.  

 문제: Rising Temperature

# 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