NullNull

프로그래머스 SQL 있었는데요 없었습니다 본문

SQL

프로그래머스 SQL 있었는데요 없었습니다

KYBee 2022. 3. 1. 01:53

Data 구조

ANIMAL_INS : 동물 보호소에 들어온 동물의 정보를 담은 테이블

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

 

ANIMAL_OUTS : 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE

 

문제

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야 합니다.

 

예시

Input: 

ANIMAL_INS

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A350276 Cat 2017-08-13 13:50:00 Normal Jewel Spayed Female
A381217 Dog 2017-07-08 09:41:00 Sick Cherokee Neutered Male

ANIMAL_OUTS

ANIMAL_ID ANIMAL_TYPE DATETIME NAME SEX_UPON_OUTCOME
A350276 Cat 2018-01-28 17:51:00 Jewel Spayed Female
A381217 Dog 2017-06-09 18:51:00 Cherokee Neutered Male

 

Output: 

ANIMAL_ID NAME
A381217 Cherokee

 

정답:

JOIN을 적절하게 사용하는 문제이다. 문제의 조건에서 보호 시작일보다 입양일이 더 빠른 동물을 조회하라는 말에 따르면 ANIMAL_INS에도 정보가 있어야 하고 ANIMAL_OUTS 에도 존재하는 데이터여야한다. 따라서 두 테이블에 모두 존재하는 데이터를 찾는 INNER JOIN을 해야한다. INNER JOIN을 완료한 이후에 ANIMAL_INS의 DATETIME과 ANIMAL_OUTS의 DATETIME을 비교한 뒤 ORDER BY 함수를 사용해서 쿼리를 완성하면 된다.

 

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME;
Comments