programmers.co.kr/learn/courses/30/lessons/59405
1. 서론
생각보다 조금 어려웠던 문제.. 주어진 조건 때문에 서브 쿼리를 써야 한다.
2. 문제 풀이
ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블
테이블 구조
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)
Q. 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
가장 먼저 들어온 => datetime
동물의 이름 => name
'가장 먼저 들어온'의 의미는 datetime이 가장 작은 값이라는 뜻이다. 그리고 그 값을 가진 동물의 이름을 출력해야 한다.
그래서 나는 서브 쿼리를 썼다. 서브 쿼리에서 min 함수를 써서 datetime의 가장 작은 값을 구하고 그걸 조건절에 넣어 동물의 이름을 구했다.
그런데 다르게 푸는 법도 있다. rownum을 쓰는 것이다. rownum은 데이터에 번호를 부여하는 것인데 rownum = 1이라고 하면 한 개의 값만 출력할 수 있다. 이 경우에는 그냥 datetime을 order by로 정렬하고 그중에 첫 번째 값만 (rownum이 1번인) 출력하게 해주는 것이다.
참조: chanhuiseok.github.io/posts/db-3/
3. 코드 설명
SELECT name
FROM animal_ins
WHERE datetime IN
(
SELECT min(datetime)
FROM animal_ins
);
where절에서 서브 쿼리를 건다. in으로 where의 조건은 맞춰주는 것이다.
조건은 datetime의 최솟값을 구해야 하기 때문에 min함수를 사용했다.
+ MySQL
SELECT name
FROM animal_ins
ORDER BY datetime
LIMIT 1
공부하다가 MySQL로 해야 할 일이 있어서 추가!!
rownum이 limit으로 간단하게 대체되는 게 Oracle 보다 오억 배 풀기 편한 듯...
내가 옛날에 걸어놓은 링크 보니까 rownum 쓰려면 서브 쿼리 써야 하는 게 극혐....
'SQL' 카테고리의 다른 글
[ORACLE] 프로그래머스 중복 제거하기 (0) | 2021.03.11 |
---|---|
[ORACLE] 프로그래머스 이름이 있는 동물의 아이디 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 동물 수 구하기 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 이름이 없는 동물의 아이디 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 여러 기준으로 정렬하기 (0) | 2021.03.10 |