[MySQL] 프로그래머스 - 상위 n개 레코드

켈로그·2025년 6월 11일

SQL

목록 보기
6/20

문제 정보 : 프로그래머스 - SELECT 고득점 KIT - 상위 n개 레코드

다음은 동물 보호소에 들어온 동물의 정보를 담은 ANIMAL_INS 테이블입니다.
ANIMAL_INS 테이블은 다음과 같으며 각 컬럼은 아래를 의미합니다.

Column nameTypeNullable설명
ANIMAL_IDVARCHAR(N)FALSE동물의 고유 ID
ANIMAL_TYPEVARCHAR(N)FALSE생물 종 (개, 고양이 등)
DATETIMEDATETIMEFALSE보호 시작일시
INTAKE_CONDITIONVARCHAR(N)FALSE입소 당시 상태
NAMEVARCHAR(N)TRUE동물 이름
SEX_UPON_INTAKEVARCHAR(N)FALSE입소 당시 성별 및 중성화 여부

문제

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL문을 작성해주세요.
※ 보호소에 가장 먼저 들어온 동물은 한 마리인 경우만 테스트 케이스로 주어집니다.


풀이1 - LIMIT 이용

SELECT name 
FROM animal_ins 
ORDER BY datetime 
LIMIT 1;

풀이2 - MIN함수 + 서브쿼리

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

MIN(datetime)으로 가장 먼저 입소한 시간을 뽑고

그 시간과 같은 DATETIME을 가진 동물을 조회

LIMIT 없이 논리적으로 "가장 먼저 입소한 동물"을 표현할 수 있음

WHERE절에서의 집계함수

아래와 같은 문장은 문법 오류

SELECT name
FROM animal_ins
WHERE MIN(datetime); -- ❌ 오류 발생
  • MIN(datetime) : 집계 함수
  • WHERE 절 : 개별 행(row)에 조건을 거는 절

집계 함수는 WHERE에서 사용할 수 없고, SELECT, HAVING, ORDER BY 에서만 사용해야 합니다.

  • WHERE: 개별 행 기준 → 집계 함수 ❌
  • HAVING: 그룹/전체 기준 → 집계 함수 ✅

그래서 서브 쿼리 안 쓸거면 HAVING으로 써야 함

-- 예시: 집계 조건은 HAVING에서 사용
SELECT MIN(datetime)
FROM animal_ins
HAVING MIN(datetime) < '2023-01-01';
profile
호랑이기운

0개의 댓글