(solvesql)Advent of SQL 2025 7일차

2025. 12. 8. 23:32·코딩 테스트/02. SQL

01. 작성쿼리

SELECT 
  t.measured_at AS date_alert
FROM 
  measurements AS y
  JOIN measurements AS m
  ON m.measured_at = y.measured_at + INTERVAL 1 DAY 
  JOIN measurements AS t
  ON t.measured_at = m.measured_at + INTERVAL 1 DAY 
   
WHERE 
	m.pm10 > y.pm10 
  AND t.pm10 > m.pm10 
	AND t.pm10 >= 30
ORDER BY 
	t.measured_at;

02. 쿼리 결과


03. 풀이 포인트

point 1 )  두 번의 셀프 조인 

셀프 조인을 해서 어제와 오늘을 비교하는 문제를 많이 보셨을겁니다

해당 문제도 어제와 오늘을 비교하면 아래와 같은 쿼리가 나옵니다

SELECT 
  yes.measured_at AS '어제', 
  t.measured_at AS '오늘',
  yes.pm10 AS '어제pm',
  t.pm10 AS '오늘pm'
FROM 
  measurements AS yes
  JOIN measurements AS t
  ON t.measured_at = yes.measured_at + INTERVAL 1 DAY 
WHERE 
	t.pm10 > yes.pm10 
	AND yes.pm10 >= 30
ORDER BY 
	t.measured_at;

하지만 이 문제는  이틀 연속 수치가 나빠진 경우라는 조건이기 때문에 

셀프조인이 두 번 들어가야합니다.

SELECT 
  y.measured_at AS 'day1', 
  m.measured_at AS 'day2',
  t.measured_at AS 'day3',
  y.pm10 AS 'day1_pm',
  m.pm10 AS 'day2_pm',
  t.pm10 AS 'day3_pm'
FROM 
  measurements AS y
  JOIN measurements AS m
  	ON m.measured_at = y.measured_at + INTERVAL 1 DAY 
  JOIN measurements AS t
  	ON t.measured_at = m.measured_at + INTERVAL 1 DAY 
   
WHERE 
	m.pm10 > y.pm10 
  	AND t.pm10 > m.pm10 
	AND t.pm10 >= 30
ORDER BY 
	t.measured_at;

여기서 또하나 놓치면 안되는건 WHERE절에서

t.pm >= 30 여기서 수치가 30 이상이 된 날은 마지막 날이라는 겁니다

이틀 연속으로 수치가 나빠져서 30㎍/㎥ 이상이 된 날 이라고 되어있기 때문에 이 부분을 놓치면 안됩니다!

설명에 쓰이는 쿼리와 답안 쿼리의 SELECT 부분이 다른건 이해를 돕기 위한 것으로 생각해주세요^^


point 2) INTERVAL 의 사용

JOIN의 조건을 사용할 때 INTERVAL을 사용했습니다

INTERVAL은 DATE 연산에 쓰는 키워드 문법입니다

아래와 같이 날짜의 날짜간의 간격 즉, 기간을 표현하는 문법이죠 

date_column + INTERVAL 1 DAY
date_column - INTERVAL 7 DAY
date_column + INTERVAL 2 MONTH
date_column - INTERVAL 3 HOUR

문제에서는 전날과 그 다음날을 비교해야했기 때문에 이렇게 키워드 문법을 사용해서 JOIN을 진행했습니다

 

이번 문제는 난이도는 2였지만 셀프조인과 INTERVAL을 몰랐다면 복잡해졌을 것같네요

그리고 문제를 명확히 정의하고 이해해야했습니다.

역시 sql은 매일 풀지 않으면 까먹고 ㅎㅎㅎ 꾸준함이 필요한 언어라는 것을 다시 한 번 느끼게되었습니다 하하핳

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[solvesql]Advent of SQL 2025 9일차  (0) 2025.12.14
(solvesql)Advent of SQL 2025 8일차  (0) 2025.12.14
(solvesql) Advent of SQL 2025 6일차  (0) 2025.12.08
(solvesql) Advent of SQL 2025 5일차  (0) 2025.12.08
[solvesql_Lv3] 미세먼지 수치의 계절간 차이(중앙값구하기)  (0) 2025.10.14
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [solvesql]Advent of SQL 2025 9일차
  • (solvesql)Advent of SQL 2025 8일차
  • (solvesql) Advent of SQL 2025 6일차
  • (solvesql) Advent of SQL 2025 5일차
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    solvesql
    코테
    Reset
    윈도우함수
    코드잇스프린트후기
    git
    cross_join
    쿼리테스트
    tableau
    tableaubootcamp
    코딩테스트
    streamlit
    DENSE_RANK
    ROW_NUMBER
    AARRR
    revert
    SQL
    rank
    이행성
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
(solvesql)Advent of SQL 2025 7일차
상단으로

티스토리툴바