프로그래머스/My SQL

오랜 기간 보호한 동물(2)

싱싱한복초이 2024. 11. 24. 12:18

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

 

프로그래머스

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

programmers.co.kr

[문제]

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

 

[나의 풀이]

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE O.DATETIME IS NOT NULL
ORDER BY TIMESTAMPDIFF(SECOND,I.DATETIME,O.DATETIME) DESC
LIMIT 2;

 

+) TIMESTAMPDIFF를 SELECT절에 넣어서 확인해봤을 때 아래와 같이 출력됨

 

[다른 풀이]

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
INNER JOIN ANIMAL_OUTS O 
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(AO.DATETIME, AI.DATETIME) DESC 
LIMIT 2;

INNER JOIN을 하는 경우 WHERE O.DATETIME IS NOT NULL같은 조건을 작성해주지 않아도 된다.

그런데 DATEDIFF()로 연산하게되면 같은 날 들어오고 같은 날 입양간 경우를 가려내지 못할거란 생각이 든다