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