[프로그래머스 SQL] Lv 3. 오랜 기간 보호한 동물(2)
SQL 고득점 Kit - String, Date 문제
✔️ 문제 설명
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 |
문제
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.
👉 문제 보러가기
✔️ 문제 풀이
(1) Pseudo-Code
- 보호소에 들어온 동물 정보 테이블과 입양 보낸 동물 정보 테이블을 동물 ID를 기준으로
JOIN
한다.(교집합만 출력) - 보호 기간이 긴 동물 정보를 불러오기 위해 입양 일자(상대적으로 큰 값)에서 보호 일자(상대적으로 작은 값)를 뺀 값을 기준으로 내림차순 정렬한다.
- 보호 기간이 가장 길었던 동물 두 마리에 대한 정보만 가져오기 위해
LIMIT
문을 사용한다.
(2) 코드 작성
SELECT T1.ANIMAL_ID, T1.NAME
FROM ANIMAL_INS AS T1
JOIN ANIMAL_OUTS AS T2 ON T1.ANIMAL_ID = T2.ANIMAL_ID
ORDER BY T2.DATETIME - T1.DATETIME DESC
LIMIT 2
(3) 코드 리뷰 및 회고
- 보호 시작일과 입양 일자의 차이(보호 기간)을 기준으로 내림차순 정렬했다.
- 두 날짜 데이터를
-
로 연산을 할 수 있을 까? 했는데 해보니 됐다. (기억하자.. DATETIME도 연산 가능.)
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기