[solvesql_Lv2] 다음날 서울숲의 미세먼지 농도 나쁨

2025. 10. 11. 16:55·코딩 테스트/02. SQL

1. 풀이 방법 (DATE_ADD)

SELECT 
  dt1.measured_at AS today,
  dt2.measured_at AS next_day,
  dt1.pm10 AS pm10,
  dt2.pm10 AS next_pm10
FROM measurements as dt1
JOIN measurements as dt2
ON dt2.measured_at =  DATE_ADD(dt1.measured_at, INTERVAL 1 DAY)
WHERE dt1.pm10 < dt2.pm10

2. POINT

해당 문제에서는 SELF JOIN을 사용해서 문제를 풀었습니다

JOIN의 조건인 ON에서 DATE_ADD를 사용했는데요

ON dt2.measured_at =  DATE_ADD(dt1.measured_at, INTERVAL 1 DAY) --dt1의 다음날과 매칭

이 쿼리는 dt1의 measured_at에 하루 더한 값이 dt2에 실제로 있을 경우에 매칭이 된다는 의미입니다

그래서 쿼리를 실행하면 당일과 다음날이 있는 경우가 매칭이 되어 한 행에 위치할수 있는거죠

 

추가적으로 테이블의 마지막 날짜는 다음날이 없기 때문에  JOIN의 종류에 따라 다르게 출력됩니다.

 

  • INNER JOIN(지금처럼 JOIN): 마지막 날은 매칭 자체가 안 되므로 결과에 “행이 없음”. NULL이 아니라 아예 안 나옵니다.
  • LEFT JOIN(왼쪽이 t1): 마지막 날은 t1은 나오고, t2 쪽 컬럼들이 NULL로 채워집니다.

 

 

3. DATE_ADD : 날짜/시간의 간격을 더하는 함수

1) 기본 문법

DATE_ADD(datetime_expr, INTERVAL n unit)
-- 같은 의미의 별칭: ADDDATE(datetime_expr, INTERVAL n unit)

 

  • datetime_expr: DATE 또는 DATETIME/TIMESTAMP
  • n: 정수(음수도 가능)
  • unit: 간격 단위

2) 자주 쓰는 단위

UNIT 의미 예시
SECOND, MINUTE, HOUR 초/분/시간 DATE_ADD(NOW(), INTERVAL 3 HOUR)
DAY, WEEK 일/주 DATE_ADD('2025-10-11', INTERVAL 7 DAY)
MONTH, QUARTER, YEAR 월/분기/년 DATE_ADD('2025-01-31', INTERVAL 1 MONTH)
MICROSECOND 마이크로초 DATE_ADD(NOW(), INTERVAL 500000 MICROSECOND)

 

예시)

-- 내일
SELECT DATE_ADD(CURDATE(), INTERVAL 1 DAY);

-- 3시간 후
SELECT DATE_ADD(NOW(), INTERVAL 3 HOUR);

-- 2개월 전
SELECT DATE_ADD(CURDATE(), INTERVAL -2 MONTH);  -- 또는 DATE_SUB(CURDATE(), INTERVAL 2 MONTH)

-- 분기에 1분기 더하기
SELECT DATE_ADD('2025-04-15', INTERVAL 1 QUARTER);

 

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

[solvesql]MySQL_2(Lv2)  (1) 2025.10.12
[solvesql_Lv2] 제목이 모음으로 끝나지 않는 영화  (0) 2025.10.12
[solvesql]MySQL_1 (Lv_2)  (0) 2025.10.11
[프로그래머스]Oracle SQL_7(Lv4)  (0) 2025.10.04
[프로그래머스]Oracle SQL_6(Lv4)/UNION ALL과 CONNECT BY  (0) 2025.10.03
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [solvesql]MySQL_2(Lv2)
  • [solvesql_Lv2] 제목이 모음으로 끝나지 않는 영화
  • [solvesql]MySQL_1 (Lv_2)
  • [프로그래머스]Oracle SQL_7(Lv4)
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
    프로그래머스
    ROW_NUMBER
    cross_join
    이행성
    코딩테스트
    SQL
    코테
    tableau
    streamlit
    git
    DENSE_RANK
    AARRR
    revert
    tableaubootcamp
    Reset
    윈도우함수
    rank
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[solvesql_Lv2] 다음날 서울숲의 미세먼지 농도 나쁨
상단으로

티스토리툴바