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;을 해줍니다.(오름차순으로 정렬된 데이터이므로 오래된 순부터 정렬되어 있음.)
'개발자 > 프로그래머스' 카테고리의 다른 글
[SQL_ORACLE]프로그래머스_년, 월, 성별 별 상품 구매 회원 수 구하기_DISTINCT 활용 (2) | 2022.12.30 |
---|---|
[SQL_ORACLE]프로그래머스_우유와 요거트가 담긴 장바구니_INTERSECT (0) | 2022.12.30 |
[SQL] 프로그래머스_흉부외과 또는 일반외과 의사 목록 출력하기_IN()연산자 활용 (0) | 2022.12.13 |
[SQL]프로그래머스_입양 시각 구하기(1)_FM키워드 사용 (0) | 2022.12.13 |
[SQL]프로그래머스_강원도에 위치한 생산공장 목록 출력하기// SUBSTR함수 (0) | 2022.12.13 |