본문 바로가기
Coding Test/프로그래머스

[MySQL] 상위 n개 레코드

by 노 코딩 노 라이프 2023. 11. 15.

문제설명

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

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


예시 

예를 들어 ANIMAL_INS 테이블이 다음과 같다면

이 중 가장 보호소에 먼저 들어온 동물은 Jack입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

※ 보호소에 가장 먼저 들어온 동물은 한 마리인 경우만 테스트 케이스로 주어집니다.

본 문제는 Kaggle의 "Austin Animal Center Shelter Intakes and Outcomes"에서 제공하는 데이터를 사용하였으며 ODbL의 적용을 받습니다.


코드 설명

SELECT NAME

이 부분은 결과 집합에 포함할 열을 지정합니다. 여기서는 동물의 이름인 NAME 열이 선택됩니다.

FROM ANIMAL_INS

 데이터를 가져올 테이블을 지정합니다. 이 경우에는 ANIMAL_INS 테이블을 사용합니다.

WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS)

이 부분은 조건을 지정합니다. 여기서는 DATETIME 열이 서브쿼리 (SELECT MIN(DATETIME) FROM ANIMAL_INS)에서 반환된 최솟값과 동일한 경우에 해당하는 행만 선택합니다.

즉, 이 부분은 동물 보호소에서 등록 일자(DATETIME)가 가장 이른 동물의 이름을 선택하는 조건입니다.


소스코드&결과

소스 코드

SELECT NAME FROM ANIMAL_INS
WHERE DATETIME = (SELECT MIN(DATETIME) FROM ANIMAL_INS);

결과


다른 사람이 짠 코드

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;

이 SQL 코드는 ANIMAL_INS 테이블에서 등록 일자(DATETIME)를 기준으로 오름차순 정렬한 후에 첫 번째 행의 동물 이름(NAME)을 선택하는 쿼리이네요!