본문 바로가기

SQL

[SQL/프로그래머스] 상위 n개 레코드

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. 

ANIMAL_INS 테이블 구조는 다음과 같으며ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

NAMETYPENULLABLE
ANIMAL_IDVARCHAR(N)FALSE
ANIMAL_TYPEVARCHAR(N)FALSE
DATETIMEDATETIMEFALSE
INTAKE_CONDITIONVARCHAR(N)FALSE
NAMEVARCHAR(N)TRUE
SEX_UPON_INTAKEVARCHAR(N)FALSE

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

 

SOLUTION

[Oracle]

1. WHERE 서브쿼리 

SELECT name
FROM animal_ins
WHERE datetime = (SELECT min(datetime)
                    FROM animal_ins );

WHERE문에 서브쿼리, min 함수를 이용해 datetime이 가장 오래된 레코드를 추출합니다. 

 

2. FROM 서브쿼리

SELECT name
FROM (SELECT name
     FROM animal_ins
     ORDER BY datetime)
WHERE rownum = 1;

FROM문에 서브쿼리를 이용해 datetime 오름차순으로 정렬(가장 오래된 시간이 맨 윗줄에 정렬됨)하여 rownum이 1인 레코드를 추출합니다. 

 

[MySQL]

SELECT name
FROM animal_ins 
ORDER BY datetime
LIMIT 1;

MySQL에서는 LIMIT를 이용하여 하나의 레코드를 출력하는 방법을 이용합니다.

 

 

문제출처 : 프로그래머스