개발자/프로그래머스

[SQL]프로그래머스_오랜기간보호동물(1)_JOIN/ROWNUM

푸루닉 2022. 12. 14. 10:33

https://school.programmers.co.kr/learn/courses/30/lessons/59044

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

먼저 이 문제를 풀기 위해서는 JOIN에 대한 이해가 필요했다.

 

문제풀이

SELECT NAME, DATETIME
FROM (
    SELECT A.NAME, A.DATETIME
    FROM ANIMAL_INS A
    LEFT OUTER JOIN ANIMAL_OUTS B
    ON A.ANIMAL_ID = B.ANIMAL_ID
    WHERE B.ANIMAL_ID IS NULL
    ORDER BY DATETIME
)
WHERE ROWNUM <= 3;

1. 문제풀이

ANIMAL_INS는 동물 보호소에 들어온 동물의 정보이며, ANIMAL_OUTS 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블이다. 문제에서 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회해야한다

그렇다면 먼저 두 테이블을 조인을 할 필요가 있으며, 문제에서 필요한 NAME을 이용해 JOIN을 시도할 것이다.

단, 동물보호소 이름 - 입양 보낸동물 이름을 해줄 필요가 있다.

LEFT OUTER JOIN을 이용해 (왼쪽이 기준이 되므로)

이 상태로 만든후

WHERE B.ANIMAL_ID IS NULL을 해줘 공집합을 빼줍니다.

이후 문제대로 시간순으로 정렬을 해줍니다.

 

여기서 가장 오랫동안 입양을 가지못한 3마리를 뽑아내야 하므로

ROWNUM <= 3;을 해줍니다.(오름차순으로 정렬된 데이터이므로 오래된 순부터 정렬되어 있음.)