정보
분류 : 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 |