정답 쿼리
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC
LIMIT 2;
해설
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
이 문제는 '입양을 간 동물' 중에 보호 기간이 길었던 동물을 찾는 문제이다. '입양을 간 동물'만 필터링하기 위해서는 입양을 보낸 날짜가 NULL값이 아니어야 한다. 즉, ANIMAL_OUTS의 DATETIME이 결측치가 아니어야 한다. 이는 INNER JOIN을 쓰면, 쉽게 해결할 수 있다. INEER JOIN을 쓰면 들어왔던 날짜와 나갔던 날짜가 모두 결측치가 아닌 동물들만 남게 된다. 참고로 MYSQL에서는 JOIN만 쓰면, INNER JOIN이 된다.
ORDER BY DATEDIFF(O.DATETIME, I.DATETIME) DESC
LIMIT 2;
ORDER BY로 정렬시킨다음 LIMIT 2로 자르면 쉽게 상위 2위까지만 조회할 수 있다. DATEDIFF는 두 날짜 사이의 차이가 며칠이 되는지 계산해 주는 함수이다.
SELECT I.ANIMAL_ID, I.NAME
SELECT문은 밑에서 INNER JOIN을 했기 때문에 I.ANIMAL_ID, I.NAME로 조회하든 O.ANIMAL_ID, O.NAME으로 조회하든 어차피 똑같은 결과가 나온다.
'코딩테스트 > SQL 코테' 카테고리의 다른 글
[프로그래머스 SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (1) | 2023.08.14 |
---|---|
[프로그래머스 SQL]조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.08.08 |
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.08.03 |
[프로그래머스 SQL] 자동차 평균 대여 기간 구하기 (1) | 2023.08.02 |
[프로그래머스 SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.07.31 |
댓글