전공/프로그래머스

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

yha97 2023. 10. 1. 11:53

날짜 : 2023. 10. 01

사용 언어 : oracle

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/59411?language=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줄을 뽑은 다음 정렬이 이루어져 오답이 나타나게 된다.

- 그래서 이 문제의 경우에는 불가피하게 서브쿼리를 사용해서 문제를 풀어야 했다.

 

 

참고 사이트