[SQL] 상위 n개 레코드

뚜비·2023년 2월 21일
0

SQL 코딩테스트

목록 보기
3/10
post-thumbnail

문제


문제 설명

  • Table : ANIMAL_INS
  • Column
    ANIMAL_ID : 동물의 아이디
    ANIMAL_TYPE : 생물 종
    DATETIME : 보호 시작일
    INTAKE_CONDITION : 보호 시작 시 상태
    NAME : 이름
    SEX_UPON_INTAKE : 성별 및 중성화 여부
  • 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회


1차

나는 다음과 같은 순서로 문제를 해결하고자 했다.

  1. 날짜 중 가장 최소값 찾기
  2. 날짜가 최솟값인 records의 NAME 출력
SELECT NAME
FROM ANIMAL_INS
WHERE DATETIME = MIN(DATETIME);


# SQL 실행 중 오류가 발생하였습니다.

위와 같은 에러가 발생하였다.. 검색해보니 DATETIME에 MIN()을 사용할 수 있던데..


WHERE에 집계함수!?!

생각해보니 서브 쿼리에서 MIN(DATETIME)을 WHERE 절에 사용한 것이 잘 못 되었다... MIN() / MAX() / SUM()과 같은 애들은 ```SELECT``` statement에서만 사용가능하다는 것!!!

집계함수
집계함수들은 입력이 여러 개의 records고 출력이 하나의 값으로 나오는데 집계함수 자체가 여러 records를 SELECT 해야 값이 나올 수 있다. 또한 WHERE 절은 조회할 집계되지 않은 자료에 대한 조건에 대한 것이니까 집계 함수를 쓰면 안 된다고!!


2차

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

따라서 서브 쿼리를 이용해서 풀면 위와 같이 구할 수 있다!!!

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글