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;