프로그래머스 SQL 고득점 KIT 연습 문제를 학습하며 정리했습니다.
1. 문제 => 있었는데요 없었습니다.
관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다.
보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요.
이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
보호시작일(ANIMAL_INS.DATETIME)보다 입양일(ANIMAl_OUTS.DATETIME)이 더 빠른 경우를 출력해야 하면 됩니다!
보호시작일(ANIMAL_INS.DATETIME)이 빠른순으로 출력하면 되니 오름차순 정렬을 사용해주면 됩니다.
- ANIMAL_INS.DATETIME > ANIMAl_OUTS.DATETIME
- 2017-08-13 13:50:00 > 2018-01-28 17:51:00
- ANIMAL_INS : 동물 보호소에 들어온 동물 정보 테이블
동물의 아이디 | 생물 종 | 보호 시작일 | 보호 시작시 상태 | 이름 | 성별 및 중성화 여부 |
ANIMAL_ID | ANIMAl_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
- ANIMAL_OUTS : 동물 보호소에서 입양보낸 동물 정보 테이블
동물의 아이디 | 생물 종 | 입양일 | 이름 | 성별 및 중성화 여부 |
ANIMAL_ID | ANIMAL_TYPE | DATETIME | NAME | SEX_UPON_OUTCOME |
테이블 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
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 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.
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 |
예시
예를 들어, ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 다음과 같다면
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_IDANIMAL_TYPEDATETIMENAMESEX_UPON_OUTCOME
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 |
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
ANIMAl_ID | NAME |
A381217 | Cherokee |
풀이
현재 문제에서는 보호 시작일보다 입양일이 더 빠른 아이디와 이름을 조회하면 되고, 보호 시작일이 빠른 순 즉 오름차순으로 출력을 해줘야 합니다.
SELECT
*
FROM
ANIMAL_INS a_i
JOIN
ANIMAL_OUTS a_o
ON
a_i.animal_id = a_o.animal_id
WHERE
a_i.datetime > a_o.datetime
ORDER BY
a_i.datetime ASC
'코딩테스트 > Programmers' 카테고리의 다른 글
[Programmers][Python][Level 1] 모의고사 (0) | 2021.04.15 |
---|---|
[Programmers][Python][Level 1] 신규 아이디 추천 (0) | 2021.04.14 |
[Programmers][Python][Level 1] 크레인 인형뽑기 게임 (0) | 2021.04.13 |
[Programmers][Python][Level 1] 두 개 뽑아서 더하기 (0) | 2021.04.13 |
[Programmers][SQL][MySQL] 없어진 기록 찾기 - JOIN (0) | 2021.03.30 |
[Programmers][SQL][MySQL] IS NULL (0) | 2021.03.29 |
[Programmers][SQL][MySQL] 입양 시각 구하기(2) - GROUP BY (0) | 2021.03.29 |
[Programmers][SQL][MySQL] 입양 시각 구하기(1) - GROUP BY (0) | 2021.03.29 |