몸과 마음이 건전한 SW 개발자

[SQL-DATE] 프로그래머스 Lv. 3 오랜 기간 보호한 동물(2) 본문

SQL/String, Date

[SQL-DATE] 프로그래머스 Lv. 3 오랜 기간 보호한 동물(2)

스위태니 2024. 12. 27. 14:40

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/59411

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

정답 코드

SELECT
    ANMO.ANIMAL_ID,
    ANMO.NAME
FROM ANIMAL_INS ANMI
RIGHT JOIN ANIMAL_OUTS ANMO
ON ANMI.ANIMAL_ID = ANMO.ANIMAL_ID 
    AND ANMI.DATETIME IS NOT NULL
ORDER BY DATEDIFF(ANMO.DATETIME, ANMI.DATETIME) DESC
LIMIT 2;

풀이 과정

  1. 조인 조건:
    • ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 ANIMAL_ID를 기준으로 RIGHT JOIN한다.
    • 조인 조건에 추가로 ANMI.DATETIME IS NOT NULL이 적용되어, ANIMAL_INS의 DATETIME이 NULL이 아닌 경우만 포함된다.
    • RIGHT JOIN을 사용했기 때문에 ANIMAL_OUTS에 있는 모든 동물이 결과에 포함되며, ANIMAL_INS에 없는 동물도 조회될 수 있다.
  2. SELECT:
    • 조인된 결과에서 ANIMAL_OUTS의 ANIMAL_ID와 NAME 컬럼을 선택한다.
  3. DATEDIFF 계산 및 정렬:
    • DATEDIFF(ANMO.DATETIME, ANMI.DATETIME)를 계산하여 동물이 입소된 날짜(ANMI.DATETIME)와 출소된 날짜(ANMO.DATETIME) 간의 차이를 기준으로 정렬한다.
    • DESC 정렬을 사용하여 날짜 차이가 가장 큰 동물이 우선으로 출력된다.
  4. LIMIT:
    • 정렬된 결과에서 상위 2개만 선택한다.

느낀점

  • 문법에 대해서 많이 떠오르지는 않지만 LIMIT, JOIN, ORDER BY를 적절하게 사용해서 문제를 풀어 봤다.
  • 다음 게시글에는 내장함수를 정리하고 다시 풀어 봐야 하는 문제들을 복습할 것 같다.