정보
분류 : 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을 사용해주었다.
'💡문제 풀이 > 프로그래머스 - Oracle' 카테고리의 다른 글
| 헤비 유저가 소유한 장소 / 77487 (0) | 2024.06.25 | 
|---|---|
| 오랜 기간 보호한 동물(2) / 59044 (0) | 2024.06.25 | 
| 있었는데요 없었습니다 / 59042 (0) | 2024.06.25 | 
| 없어진 기록 찾기 / 59042 (0) | 2024.06.25 | 
| 조건에 부합하는 중고거래 상태 조회하기 / 164672 (0) | 2023.11.03 | 
