👇 상위 n개 레코드
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
🔓 문제 설명
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.
예시 문제 데이터(ANIMAL_INS)
| ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
| A399552 | Dog | 2013-10-14 15:38:00 | Normal | Jack | Neutered Male |
| A379998 | Dog | 2013-10-23 11:42:00 | Normal | Disciple | Intact Male |
| A370852 | Dog | 2013-11-03 15:04:00 | Normal | Katie | Spayed Female |
| A403564 | Dog | 2013-11-18 17:03:00 | Normal | Anna | Spayed Female |
⚡SQL Query
전통적인 방식(ROWNUM)
SELECT NAME
FROM (
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC
)
WHERE ROWNUM = 1;
서브쿼리를 이용한 다른 풀이(MIN)
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = (SELECT MIN(DATETIME)
FROM ANIMAL_INS);
OFFSET 페이징 처리 풀이
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
🔎 풀이 설명
1. 정렬: 가장 먼저 들어온 동물을 찾아야 하므로 날짜를 기준으로 오름차순으로 정렬합니다.
2. 개수 제한: 정렬된 결과 중 가장 상위에 있는 한 건의 데이터만 가져옵니다.
💡인사이트
1. Top-N Stop
- 인덱스가 존재할 시 DB는 전체를 정렬하지 않고, 인덱스의 가장 첫 번째 리프 블록을 읽자마자 1건을 찾고 바로 스캔을 멈춥니다.
2. 페이징 처리 방식 비교
- ROWNUM & FETCH 방식
- 인덱스가 있다면 성능이 우수합니다. 하지만 뒤쪽 페이지로 갈수록 느려집니다.
- 결과는 10건이라도 DB는 인덱스를 따라 출력하고자하는 블록까지 건너뛰지 않고 일일이 접근합니다.
- RowID 방식
- Table Access By Index ROWID 횟수를 획기적으로 줄입니다.
- 인덱스만 읽어서 ROWID만 챙긴 후 필요한 데이터에 대해서만 접근하기에 부하가 적습니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : Python 개발자 찾기(SELECT) (0) | 2026.04.15 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 업그레이드 된 아이템 구하기(SELECT) (0) | 2026.04.15 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 오프라인/온라인 판매 데이터 통합하기(SELECT) (0) | 2026.04.14 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 재구매가 일어난 상품과 회원 리스트 구하기(SELECT) (0) | 2026.04.14 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 서울에 위치한 식당 목록 출력하기(SELECT) (0) | 2026.04.13 |