[프로그래머스, SQL] 있었는데요 없었습니다

2026. 8. 2. 01:15·코테/MySQL

💻 코드

SELECT AI.ANIMAL_ID, AI.NAME
FROM ANIMAL_INS AI
    JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AI.DATETIME > AO.DATETIME
ORDER BY AI.DATETIME ASC;

📖 새로 배운 부분

  1. 지난번 "없어진 기록 찾기"는 한쪽 테이블에만 있는 데이터를 찾는 거라 LEFT JOIN이 필요했는데, 이번엔 입소 기록과 입양 기록이 둘 다 있는 동물끼리만 비교하면 되니까 그냥 JOIN(INNER JOIN)으로 충분했다.
  2. WHERE절에서 조인한 두 테이블의 날짜 컬럼을 바로 비교(AI.DATETIME > AO.DATETIME)할 수 있다는 걸 배웠다. 입양일이 입소일보다 빠른, 논리적으로 이상한 데이터를 이렇게 걸러낼 수 있었다.

💻 코드2 (DATEDIFF 활용)

SELECT AI.ANIMAL_ID, AI.NAME
FROM ANIMAL_INS AI
    JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE DATEDIFF(AI.DATETIME, AO.DATETIME) > 0
ORDER BY AI.DATETIME ASC;

DATEDIFF(날짜1, 날짜2)는 날짜1에서 날짜2를 뺀 일(day) 수를 반환한다. 간단한 예로

SELECT DATEDIFF('2018-01-28', '2017-08-13');  -- 168

이렇게 첫 번째 날짜가 두 번째 날짜보다 며칠 늦은지를 숫자로 알려준다.

그래서 DATEDIFF(AI.DATETIME, AO.DATETIME) > 0은 "입소일이 입양일보다 며칠이라도 늦다(=입양일이 더 빠르다)"는

조건이 되어, 원래 코드의 AI.DATETIME > AO.DATETIME과 같은 역할을 한다.

 

다만 DATEDIFF는 날짜(연-월-일)만 비교하고 시:분:초는 무시한다는 점은 주의해야 한다. 입소일과 입양일이 같은 날짜이고 시간만 다른 경우에는 DATEDIFF 결과가 0이 되어버려서, 시간까지 비교하는 원래 코드와 결과가 달라질 수 있다.

이 문제처럼 시간까지 정확히 봐야 하는 경우엔 DATEDIFF보다 DATETIME 컬럼을 직접 비교하는 코드1이 더 안전하다.

 

⚠️ DATEDIFF vs TIMESTAMPDIFF, 계산 방향이 반대다

둘 다 날짜/시간 차이를 구하는 함수인데, 뺄셈 방향이 서로 반대라 헷갈리기 쉽다.

함수  계산 방식
DATEDIFF(A, B) A - B
TIMESTAMPDIFF(단위, A, B) B - A (A에서 B까지 흐른 시간)
SELECT DATEDIFF('2026-06-01', '2026-06-03');            -- -2  (A가 더 과거라서 음수)
SELECT TIMESTAMPDIFF(DAY, '2026-06-01', '2026-06-03');   -- 2   (A→B로 흐른 날짜라 양수)

 

한 줄로 정리하면: DATEDIFF는 첫 번째 인수에서 두 번째 인수를 빼고, TIMESTAMPDIFF는 반대로 두 번째 인수에서 첫 번째 인수를 뺀다(시작 → 끝까지 흐른 시간 개념).

참고

 

코딩테스트 연습 - 있었는데요 없었습니다

알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려

school.programmers.co.kr

 

'코테 > MySQL' 카테고리의 다른 글

[프로그래머스, SQL] 보호소에서 중성화한 동물  (0) 2026.08.02
[프로그래머스, SQL] 오랜 기간 보호한 동물(1)  (0) 2026.08.02
[프로그래머스, SQL] 없어진 기록 찾기  (0) 2026.08.02
[프로그래머스, SQL] 조건에 맞는 도서와 저자 리스트 출력하기  (0) 2026.08.02
[프로그래머스, SQL] 흉부외과 또는 일반외과 의사 목록 출력하기  (0) 2026.08.02
'코테/MySQL' 카테고리의 다른 글
  • [프로그래머스, SQL] 보호소에서 중성화한 동물
  • [프로그래머스, SQL] 오랜 기간 보호한 동물(1)
  • [프로그래머스, SQL] 없어진 기록 찾기
  • [프로그래머스, SQL] 조건에 맞는 도서와 저자 리스트 출력하기
devoks
devoks
느려도 꾸준히
  • devoks
    ok's 개발일지
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Front-End
      • Back-End
        • Spring
        • Infra
        • AI
      • Computer Science
        • Cs
      • 언어
        • Java
        • SQL
      • 코테
        • Java
        • MySQL
      • Etc.
  • 블로그 메뉴

    • 홈
  • 링크

    • My GitHub
  • 공지사항

  • 인기 글

  • 태그

    정규표현식
    springboot
    StringTokenizer
    PrePersist
    PaaS
    Container
    stack
    BufferedReader
    compare
    Regex
    유클리드호제법
    최대공배수
    programmers
    BFS
    switch
    역직렬화
    persist
    BufferedWriter
    java
    effectivejava
    replace
    CI/CD
    CS
    최대공약수
    dfs
    IaaS
    codingtest
    json
    replaceAll
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, SQL] 있었는데요 없었습니다
상단으로

티스토리툴바