세조목

SQL 정리(self join)(23.12.22) 본문

데이터 분석 공부/SQL

SQL 정리(self join)(23.12.22)

세조목 2023. 12. 22. 21:00

https://leetcode.com/problems/rising-temperature/

 

금일 풀었던 예제다.

문제에서 요구하는건 금일의 온도가 전일보다 높은 id를 찾으라는 것이다.

 

온도가 높은지 낮은지 판단하려면 비교 대상이 있어야 하는데 같은 컬럼에서 어떻게 비교할 수 있을까??

지금까지 학습한 내용 중에서는 같은 컬럼에 속한 값들을 비교할 수 있는 문법은 없었다.

그래서 방법을 찾아보니 같은 테이블을 하나 더 join하는 식으로 비교 대상을 만들 수 있었다.

무슨 말인고하니

이렇게 테이블이 하나 있는데

기존에 있던 테이블을 그대로 옆에다가 붙이는 것이다.

이것을 SELF JOIN 기능이라고 한다.

LEFT(or RIGHT) JOIN 또는 INNER JOIN의 경우 합칠때 문법이 아래와 같은데

더보기

테이블1 AS 별명1 JOIN 테이블2 AS 별명2 ON 별명1.컬럼명1 = 별명2.컬럼명2

SELF JOIN의 경우

더보기

테이블명 별명1, 테이블명 별명2

이렇게만 적어주면 된다.


 

그래서 위 문제의 경우

  1. SELF JOIN 기능을 사용해서 테이블을 합쳐주고
  2. WHERE 절에서 조건을 지정해주면 간단하게 문제가 풀린다.

WHERE절에는 

더보기

DATEDIFF(별명1.recordDate, 별명2.recordDate) = 1 and 별명1.temperature > 별명2.temperature

이 조건을 넣어주면 된다.

별명1에 해당하는 테이블이 오늘에 해당하는 테이블이 되는 것이고,

별명2에 해당하는 테이블이 어제에 해당하는 테이블이 되는 것이다.