제목: 있었는데요 없었습니다
레벨: LEVEL 3
으아아 폭풍문제풀이 가보자고~
이 문제는 테이블에 외래키도 껴있고 그러니까 먼저 데이터설명을 보는 게 좋다.
관리자형.. 실수를 멈춰주라..😩
실수는 관리자가 하고 역시 수습하는 건 나같은 사원이구나..
암턴
문제를 요약하면 지금 바쁘다바빠 실수사회이기 때문에
입양일이 잘못됐다. 그래서 보호 시작일보다 입양일이 빠른 애들은 쇽쇽 골라야 한다.
ANIMAL_INS 테이블과 ANIMAL_OUT테이블을 먼저 합친 뒤
각 테이블의 날짜를 비교하여 조건에 해당하는 데이터를 빼내자.
정답은 이렇게 작성했다.
비교적 간단한 문제였으나 가장 고민이었던 건 WHERE절에 있는 부등호였다.
뭐 숫자는 부등호가 바로바로 이해되지만 날짜도 부등호에 적용될까..?
하는게 의문이었다!
그런데 해보니 됐다.
날짜의 부등호는 앞선 날짜가 더 작은 쪽,
뒤에 있는 날짜가 더 큰쪽이라고 생각하면 된다.
즉, 우리는 보호시작일(보호소 입소일)보다 입양일이 빠른 데이터(잘못된 데이터)를
찾는 것이기 때문에
입소일(ANIMAL_INS.DATETIME) > 입양일(ANIMAL_OUTS.DATETIME)
으로 조건을 적으면 된다.
최종정리
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
→ 가져올 데이터의 컬럼을 작성하자. 동물아이디와 동물이름을 가져올 것이다.
from ANIMAL_INS
→ 가져올 데이터가 있는 테이블을 작성하자.
left join ANIMAL_OUTS on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
→ 기준 테이블과 합칠(JOIN) 테이블을 작성한다. 그래야 WHERE절에 있는 조건을 적용하여 원하는 값을 더을 수 있다.
where ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
→ 값의 기준이 되는 날짜 비교를 WHERE절에 넣어준다. 간단하게 부등호로 하기!
order by ANIMAL_INS.DATETIME;
→ 마지막으로 정렬순서. 오류가 없는 보호시작일로 정렬하는데 이때
보호시작일이 빠른 순서이기 때문에 오름차순으로 하면 된다.
오름차순은 ORDER BY의 기본설정이라 따로 키워드를 안줘도 된다.
'SQL 문제풀이' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit : 오랜 기간 보호한 동물(1) 문제풀이 (0) | 2023.05.25 |
---|---|
[프로그래머스] SQL 고득점 Kit : 상품 별 오프라인 매출 구하기 문제풀이 (0) | 2023.05.25 |
[프로그래머스] SQL 고득점 Kit : 조건에 맞는 도서와 저자 리스트 출력하기 문제풀이 (0) | 2023.05.25 |