💡문제 풀이/프로그래머스 - Oracle

오랜 기간 보호한 동물(1) / 59044

뇌 리셋은 기본이지 2024. 6. 25. 15:22

정보

분류 : JOIN

 

문제

문제링크

 

풀이

-- 조       회 : 아직 입양 못 간 동물 중 가장 오래 보호소에 있었던 동물 3마리 추출
-- 조회컬럼 : 동물 이름, 보호 시작일
-- 정렬기준 : 보호 시작일 순으로 정렬

풀이 1. MINUS, ROWNUM


  
SELECT NAME
, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID IN (SELECT ANIMAL_ID
FROM ANIMAL_INS
MINUS
SELECT ANIMAL_ID
FROM ANIMAL_OUTS)
AND ROWNUM < 4
ORDER BY DATETIME

풀이 2. 다중행 서브쿼리(NOT IN), FETCH


  
SELECT NAME
, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN (
SELECT ANIMAL_ID
FROM ANIMAL_OUTS
)
ORDER BY DATETIME FETCH FIRST 3 ROWS ONLY;

풀이 3. NOT EXISTS, ROWNUM


  
SELECT *
FROM (
SELECT NAME
, DATETIME
FROM ANIMAL_INS I
WHERE NOT EXISTS (
SELECT 1
FROM ANIMAL_OUTS
WHERE ANIMAL_ID = I.ANIMAL_ID
)
ORDER BY DATETIME
)
WHERE ROWNUM <= 3

 

풀이 내용

출력할 행을 컨트롤하는 방법으로는 ROWNUM과 FETCH를 사용하였다. 글쓴이에게는 ROWNUM이 더욱 익숙하기 때문에 필요한 순간이 오면 바로바로 사용하고는 한다. 데이터를 가공하는 방법으로는 EXISTS와 다중행 서브쿼리, MINUS을 사용해주었다.