💡문제 풀이/프로그래머스 - 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을 사용해주었다.