Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- group by
- Dynamic Programming
- programmers
- 소프티어
- LEVEL 2
- bfs
- softeer
- SQL 고득점 KIT
- 자바스크립트
- Java
- Lv. 2
- dfs
- 동적계획법
- join
- Lv. 3
- 너비 우선 탐색
- level 3
- 오블완
- DP
- 티스토리챌린지
- Lv. 0
- select
- SQL
- 파이썬
- Lv. 1
- javascript
- 프로그래머스
- C언어
- 깊이 우선 탐색
- Python
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
[SQL-DATE] 프로그래머스 Lv. 3 오랜 기간 보호한 동물(2) 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/59411
정답 코드
SELECT
ANMO.ANIMAL_ID,
ANMO.NAME
FROM ANIMAL_INS ANMI
RIGHT JOIN ANIMAL_OUTS ANMO
ON ANMI.ANIMAL_ID = ANMO.ANIMAL_ID
AND ANMI.DATETIME IS NOT NULL
ORDER BY DATEDIFF(ANMO.DATETIME, ANMI.DATETIME) DESC
LIMIT 2;
풀이 과정
- 조인 조건:
- ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 ANIMAL_ID를 기준으로 RIGHT JOIN한다.
- 조인 조건에 추가로 ANMI.DATETIME IS NOT NULL이 적용되어, ANIMAL_INS의 DATETIME이 NULL이 아닌 경우만 포함된다.
- RIGHT JOIN을 사용했기 때문에 ANIMAL_OUTS에 있는 모든 동물이 결과에 포함되며, ANIMAL_INS에 없는 동물도 조회될 수 있다.
- SELECT:
- 조인된 결과에서 ANIMAL_OUTS의 ANIMAL_ID와 NAME 컬럼을 선택한다.
- DATEDIFF 계산 및 정렬:
- DATEDIFF(ANMO.DATETIME, ANMI.DATETIME)를 계산하여 동물이 입소된 날짜(ANMI.DATETIME)와 출소된 날짜(ANMO.DATETIME) 간의 차이를 기준으로 정렬한다.
- DESC 정렬을 사용하여 날짜 차이가 가장 큰 동물이 우선으로 출력된다.
- LIMIT:
- 정렬된 결과에서 상위 2개만 선택한다.
느낀점
- 문법에 대해서 많이 떠오르지는 않지만 LIMIT, JOIN, ORDER BY를 적절하게 사용해서 문제를 풀어 봤다.
- 다음 게시글에는 내장함수를 정리하고 다시 풀어 봐야 하는 문제들을 복습할 것 같다.
'SQL > String, Date' 카테고리의 다른 글
[SQL-STRING, DATE] 프로그래머스 Lv. 3 대여 기록이 존재하는 자동차 리스트 구하기 (1) | 2024.12.27 |
---|---|
[SQL-DATE] 프로그래머스 Lv. 2 연도 별 평균 미세먼지 농도 조회하기 (0) | 2024.12.21 |
[SQL-DATE] 프로그래머스 Lv. 1 한 해에 잡은 물고기 수 구하기 (0) | 2024.12.18 |