Database/PROGRAMMERS[DB]

[PROGRAMMERS] Lv.3 오랜 기간 보호한 동물(2) => String, Date

임성장 2023. 11. 24. 10:01
728x90

문제

입양을 간 동물 중, 

보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 

이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.

 

풀이  논리 과정

     "보호 기간이 가장 길었던" : 입양일과 보호 시작일의 차이를 구해야함.

->  두 차이를 구하기 위해서는 테이블 ANIMAL_INS과 테이블 ANIMAL_OUTS을 JOIN 해야 함.

->  차이에 대한 결과에 Mapping 되는 아이디와 이름을 출력해야 하기 때문에 JOIN TABLE과 ANIMAL_INS를 다시 한 번 JOIN함.

->  "두 마리" : LIMIT을 통해 상위 2개의 행을 출력

 

풀이

SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN (
    SELECT I.ANIMAL_ID, DATEDIFF(O.DATETIME, I.DATETIME) AS DATETIME_DIFF
    FROM ANIMAL_INS I
    JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
) J ON I.ANIMAL_ID = J.ANIMAL_ID
ORDER BY J.DATETIME_DIFF DESC
LIMIT 2;

 

  • 서브쿼리 작성 후 JOIN
    • 서브쿼리를 사용하여 조인하는 것은, 하나의 쿼리 안에서 다른 쿼리를 실행하고 그 결과를 사용하는 개념
    • 서브쿼리를 사용하면 데이터를 더 세부적으로 필터링하거나 계산할 수 있음.
728x90