[LeetCode] SQL 50 / MySQL / 197. Rising Temperature

2024. 1. 6. 17:10Coding/LeetCode-SQL

문제 링크

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

 

Rising Temperature - LeetCode

Can you solve this real interview question? Rising Temperature - Table: Weather +---------------+---------+ | Column Name | Type | +---------------+---------+ | id | int | | recordDate | date | | temperature | int | +---------------+---------+ id is the co

leetcode.com

 

문제

 

코드

# Write your MySQL query statement below
SELECT Day1.id
FROM Weather AS Day1, Weather As Day2
WHERE Day1.Temperature > Day2.Temperature AND TO_DAYS(Day1.recordDate) - To_DAYS(Day2.recordDate) = 1;

 

1. 다음 날의 온도가 현재 조회하는 온도보다 높아야 한다는 조건이 가장 어려우면서 핵심인 것 같다. 

그러니까 (1) 날짜가 하나 커야 된다. (2) 하나 큰 날짜의 온도가 현재 조회하는 온도보다 커야된다. 

라는 두 가지 조건이 붙게 된다. 

같은 테이블에 대해 SELF JOIN을 만들어준다. SELF JOIN이란 한 테이블 내에서 두 개의 조인을 이루는 것을 말한다. 

DAY1은 다음 날에 대한 테이블이라고 보고 DAY2는 현재 날에 대한 테이블이라고 본다.

 

2. 이어서 조건절에 TO_DAYS() 함수의 차를 넣어준다. 

TO_DAYS() 함수는 그레고리력 기준으로 0년에서 현재 조회하려는 날짜까지의 날 수를 새어주는 함수이다.

어차피 우리는 다음 날이라는 조건만 붙이면 되므로 다음날 - 현재날 = 1(하루 차이) 라는 것을 이용해 WHERE 절을 구성해준다.