본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 있었는데 없습니다-datediff

by kime2 2024. 1. 5.
출처

 

문제

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

 

문제에 대한 해석

입양일이 보호시작일보다 빠른 동물의 아이디와 이름

풀이(MYSQL)

<오답>..?
with temp as (
select ins.animal_id, ins.name, ins.datetime as indate ,outs.datetime as outdate
from animal_ins ins join animal_outs outs on ins.animal_id outs.animal_id
)
select animal_id, name, indate, outdate
from temp
where datediff(indate,outdate) > 0
order by indate
<정답>
with temp as (
select ins.animal_id, ins.name, ins.datetime as indate ,outs.datetime as outdate
from animal_ins ins join animal_outs outs on ins.animal_id outs.animal_id
)
select animal_id, name, indate, outdate
from temp
where (indate-outdate) > 0
order by indate

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

  1. FROM, JOIN, WITH 절: animal_ins테이블과 animal_outs테이블을 animal_i를 기준으로 조인하여 쿼리에 필요한 아이디, 이름, 보호일, 입양일을 조회하여 임시테이블에 저장한다
  2. WHERE 절: 보호일이 입양일보다 빠른일을 알기위해 보호일과 입양일의 차가 0보다 클 경우 필터링한다
  3. SELECT 절: 해당 동물의 아이디, 이름을 조회한다
  4. ORDER BY 절: 보호시작일이 빠른순으로 오름차순한다. (최근일자 또는 미래일수록 날짜의 수가 크므로)
  5. 결과반환: 보호시작일이 빠른순의 돌물아이디와 이름

배운점