Post

오랜 기간 보호한 동물(2)

String, Date

오랜 기간 보호한 동물(2)


문제 설명

다음은 동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블과 입양 보낸 동물의 정보를 담은 ANIMAL_OUTS 테이블입니다.


ANIMAL_INS 테이블

Column nameTypeNullableDescription
ANIMAL_IDVARCHAR(N)FALSE동물의 아이디
ANIMAL_TYPEVARCHAR(N)FALSE생물 종
DATETIMEDATETIMEFALSE보호 시작일
INTAKE_CONDITIONVARCHAR(N)FALSE보호 시작 시 상태
NAMEVARCHAR(N)TRUE이름
SEX_UPON_INTAKEVARCHAR(N)FALSE성별 및 중성화 여부


ANIMAL_OUTS 테이블

Column nameTypeNullableDescription
ANIMAL_IDVARCHAR(N)FALSE동물의 아이디
ANIMAL_TYPEVARCHAR(N)FALSE생물 종
DATETIMEDATETIMEFALSE입양일
NAMEVARCHAR(N)TRUE이름
SEX_UPON_OUTCOMEVARCHAR(N)FALSE성별 및 중성화 여부




문제

입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 결과는 보호 기간이 긴 순으로 조회해야 합니다. ※ 입양을 간 동물이 2마리 이상인 경우만 입력으로 주어집니다.




풀이 과정
  1. JOIN으로 보호소 정보와 입양 정보 연결
    • ANIMAL_ID 기준으로 INNER JOIN하여 보호 시작일과 입양일을 함께 사용할 수 있도록 연결
  2. 보호 기간 계산
    • 보호 기간은 입양일(DATETIME)에서 보호 시작일(DATETIME)을 빼서 계산. 보호 기간은 날짜 간의 차이로 계산되므로 DATEDIFF 함수를 사용!!!
  3. 결과 정렬
    • 정렬 기준에 따라 ORDER BY로 결과 정렬
      • 보호 기간을 기준으로 내림차순 정렬한 후 LIMIT으로 상위 2개의 데이터를 가져오자
  4. 최종 결과 출력
    • SELECT 절에서 ANIMAL_ID, NAME만 출력하자
  • 교훈
    • Oracle 보다 확실히 직관적이다. DATEDIFF.. MySQL에서는 (입양일 - 보호시작일 같은 직접적인 날짜 간 뺄셈은 불가능하다. 그러므로 DATEDIFF를 써줘야 함……. 별표 이백오십개




정답

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
    I.ANIMAL_ID, 
    I.NAME
FROM 
    ANIMAL_INS I
JOIN 
    ANIMAL_OUTS O 
ON 
    I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY 
    DATEDIFF(O.DATETIME, I.DATETIME) DESC, 
    I.ANIMAL_ID
LIMIT 2;


Tip

보호기간 = 입양일 - 보호시작일

  • DATEDIFF 함수 : 두 날짜 간의 차이를 계산하여 보호 기간 구하기




개념 확인

  • INNER JOIN
    • 두 테이블 간의 공통된 데이터를 기준으로 결합
    • ON 절에서 조건을 지정하여 결합할 기준을 명시
  • DATEDIFF(date1, date2) 함수
    • 두 날짜 간의 차이를 일 단위로 계산하는 함수.
      • date1은 기준 날짜로, 더 미래의 날짜여야 양수 값이 반환됨
      • date2는 비교할 과거의 날짜로 설정
      • ex) **DATEDIFF('2023-12-31', '2023-01-01')**은 **364**를 반환하여 두 날짜 간의 일 수 차이를 나타냄
    • MySQL, Oracle 비교
      • MySQL : 반드시 DATEDIFF(date1, date2)로 사용해야 함. MySQL에서 직접 날짜 간 뺄셈을 시도하면 오류가 발생!
      • Oracle : 입양일 - 보호시작일 형태로 날짜 간 뺄셈이 바로 가능하고, 결과는 일 단위로 반환됩니다.
  • ORDER BY와 LIMIT
    • 결과를 보호 기간 기준으로 정렬한 후 상위 2개만 선택




오랜 기간 보호한 동물(2)

This post is licensed under Park Juyoung by the author.

Trending Tags