전공/프로그래머스
(SQL) 오랜 기간 보호한 동물(2)
yha97
2023. 10. 1. 11:53
날짜 : 2023. 10. 01
사용 언어 : oracle
문제
코드
-- 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문
-- 결과는 보호 기간이 긴 순으로 조회
select *
from (
select a.animal_id, a.name -- 아이디, 이름 출력
from animal_ins a
join animal_outs b on a.animal_id = b.animal_id
order by (b.datetime - a.datetime + 1) desc -- 보호기간이 긴 순으로 정렬
)
where rownum < 3
;
풀이
- 보호기간을 계산한 다음, 해당 데이터를 내림차순으로 정렬하여 서브쿼리를 작성한다.
- 그 다음 해당 테이블을 토대로 2개 row만 출력
알게된 점
- 오라클 작동방법을 확실하게 몰랐던 것이 문제였던 것 같다.
- from -> where -> order by -> select였는데, 만약 서브쿼리 없이 곧바로 where, order by를 넣으면 2줄을 뽑은 다음 정렬이 이루어져 오답이 나타나게 된다.
- 그래서 이 문제의 경우에는 불가피하게 서브쿼리를 사용해서 문제를 풀어야 했다.
참고 사이트
-