https://leetcode.com/problems/rising-temperature/description/?envType=study-plan-v2&envId=top-sql-50

코드설명

INNER JOIN + EXISTS + NL SEMI JOIN + DATE_ADD(INTERVAL) 을 활용합니다.

 

가장 간단한 방식은 INNER JOIN 한뒤 날짜 전날을 찾아서 온도가 전날보다 큰 값만 찾는경우입니다.

이경우 역시 단점이 존재합니다. 모든 데이터를 불러오고 처리하기에 부분범위처리가 안되겠지요,

 

NL세미조인 쿼리를 활용해 기본적으로 NL조인과 같은 프로세스이지만, 조인에 성공하는 순간 진행을 멈추고 메인쿼리의 다음 로우를 계속 처리하도록 합니다. (필터 오퍼레이션과 같은기능, 부분범위처리가 가능)

 

이외에도 WITH + LAG와 같은 윈도우함수를 사용해도 됩니다.

MYSQL 코드

JOIN을 활용한 정답코드입니다.

SELECT W1.ID
FROM WEATHER W1, WEATHER W2
WHERE DATE_ADD(W1.RECORDDATE, INTERVAL -1 DAY) = W2.RECORDDATE
AND W1.TEMPERATURE > W2.TEMPERATURE;

 

OLTP 환경에 적합한 EXISTS를 활용한 세미조인쿼리입니다.

SELECT W1.ID
FROM WEATHER W1
WHERE EXISTS (
            SELECT 'X' FROM WEATHER W2
            WHERE DATE_ADD(W1.RECORDDATE, INTERVAL -1 DAY) = W2.RECORDDATE
            AND W1.TEMPERATURE > W2.TEMPERATURE
            );

+ Recent posts