상위 n개 레코드의 문제는 다음과 같다.


이 문제를 풀기 위해서는
1. 동물의 이름을 출력
2. 가장 먼저 들어온 동물을 출력
의 순서를 거쳐야 한다.
이 문제를 풀기 위한 방법으로
지금 당장 생각나는건 2가지 정도이다.
하나는 LIMIT 명령어를 통해 1가지의 결과만 반환하는 것이고
또 다른 하나는 서브쿼리를 이용하는 방법이다.
그럼 우선 LIMIT 명령어를 통해 풀어보도록 하겠다.
(1) LIMIT 명령어 사용
우선 SELECT문을 통해 이름을 가져오는 쿼리문을 작성하고

보호 시작일을 기준으로
가장 먼저 들어온 동물이 출력되게끔
정렬해보겠다.

이제 여기다가 상위 레코드 하나만 출력되게끔
LIMIT 명령어를 통해 제약을 걸어보겠다.

출력되는 결과를 보면

LIMIT명령어를 통해
명령한대로 하나의 레코드만을
반환하는 것을 확인할 수 있다.
(2) 서브쿼리 사용
그렇다면 이번엔 서브쿼리를 사용하여 문제를 풀어보겠다.
이 경우 위의 LIMIT명령어와 달리
쿼리문이 조금 복잡해보일 수 있다.
우선 위와 같이 이름을 출력하는 쿼리문을 작성하고 시작하겠다.

이제 ANIMAL_INS의 테이블에서 NAME을 가져왔으니
보호 시작일을 기준으로 정렬된
상위의 값 1개만을 가져오는 서브쿼리를 조건을 걸어보겠다.
서브쿼리 작성 순서는 다음과 같다.
1. DATETIME을 가져온다
2. DATETIME 중 가장 작은 최솟갑을 가져온다.
우선 DATETIME을 가져오기 위해
SELECT문을 사용하겠다.

이제 여기서 MIN() 함수를 사용하여
보호 시작일을 기준으로
최솟값만을 가져와보겠다.

이제 이 쿼리문을 본 쿼리문에 붙여보겠다.
지금 내가 조건을 걸고자 하는 곳은 보호 시작일이며,
조건을 걸기 위해선 WHERE절이 필요하다.
이를 쿼리문으로 바꾸면 다음과 같이 된다.

그리고 이 쿼리문을 실행시켜보면

위의 첫번째 방법과 같이
하나의 레코드만이 출력되는 것을 확인할 수 있다.
이제 이 쿼리문도 정답으로 쳐 주는지 확인해보겠다.

정답이다.
'DB > 문제풀이' 카테고리의 다른 글
| [프로그래머스] 경기도에 위치한 식품창고 목록 출력하기 -LV.1 (0) | 2022.12.15 |
|---|---|
| [프로그래머스] 최댓값 구하기 -LV.1 (0) | 2022.12.15 |
| [프로그래머스] 여러 기준으로 정렬하기 -LV.1 (0) | 2022.12.14 |
| [프로그래머스] 강원도에 위치한 생산공장 목록 출력하기 - LV.1 (0) | 2022.12.13 |
| [프로그래머스] 이름이 있는 동물의 아이디 -LV.1 (0) | 2022.12.12 |