본문 바로가기

SQL Kit/SELECT

상위 n개 레코드 추출하기 [ 프로그래머스 | SQL Kit | Level 1 ]

1. 문제목적

정렬된 데이터를 기준으로 상위 1개의 레코드를 효율적으로 추출하는 방법을 학습하는 것이다. ORDER BY와 LIMIT을 조합하여 데이터를 정렬한 뒤 원하는 범위의 결과를 제한적으로 추출하는 방법을 익히며, 이를 통해 다음 개념을 학습한다

  • 정렬된 데이터를 기반으로 특정 조건에 맞는 최상위 레코드 추출.
  • 데이터를 정렬하고 제한하는 SQL 기능을 이해하고 활용.

2. 핵심개념

2.1 ORDER BY

  • 데이터를 특정 열을 기준으로 정렬하는 SQL 절.
ORDER BY 열1 ASC, 열2 DESC;
  • 오름차순(ASC): 기본값이며, 작은 값부터 큰 값 순서로 정렬.
  • 내림차순(DESC): 큰 값부터 작은 값 순서로 정렬.

2.2 LIMIT

  • SQL 결과에서 반환되는 행의 수를 제한.
SELECT 열1, 열2
FROM 테이블
LIMIT N;
  • LIMIT N은 상위 N개의 결과만 반환하며, 결과를 축소하여 처리 속도를 높일 수 있다.

3. 문제해결 절차

  1. 문제 요구사항 이해하기
    • ANIMAL_INS 테이블에서 가장 먼저 보호소에 들어온 동물의 이름(NAME)을 조회한다.
    • 가장 먼저 들어왔다는 기준은 DATETIME 열의 가장 작은 값이다.
  2. 정렬 조건 분석
    • DATETIME을 기준으로 오름차순(ASC) 정렬하여 가장 오래된 레코드를 찾는다.
  3. LIMIT 사용
    • 정렬된 결과에서 상위 1개 행만 가져오도록 LIMIT 1을 사용한다.
  4. SQL 문 작성
    • 정렬과 제한 조건을 조합하여 SQL 문을 작성한다.
  5. 테스트 및 검증
    • SQL 실행 후 결과가 정확히 요구사항에 부합하는지 확인한다.

4. 코드작성

SQL 문

sql
코드 복사
-- 가장 먼저 보호소에 들어온 동물의 이름을 조회하는 SQL
SELECT
    NAME           -- 동물의 이름을 출력
FROM
    ANIMAL_INS     -- ANIMAL_INS 테이블에서 조회
ORDER BY
    DATETIME ASC   -- 보호소에 들어온 시간을 기준으로 오름차순 정렬
LIMIT 1;           -- 가장 먼저 들어온 한 개의 레코드만 반환

  1. SELECT NAME
    • 동물의 이름(NAME)만 출력한다.
  2. FROM ANIMAL_INS
    • 데이터를 조회할 테이블로 ANIMAL_INS를 지정한다.
  3. ORDER BY DATETIME ASC
    • DATETIME 열을 기준으로 오름차순 정렬한다. 가장 오래된 시간의 레코드가 첫 번째로 정렬된다.
  4. LIMIT 1
    • 정렬된 결과에서 상위 1개 행만 반환한다.

5. 코드분석

5.1 SELECT

  • 출력할 열을 선택.
  • 이 문제에서는 NAME 열만 출력하도록 설정.

5.2 FROM

  • 데이터를 조회할 테이블을 지정.
  • ANIMAL_INS 테이블에서 데이터를 가져온다.

5.3 ORDER BY

  • 데이터를 정렬하는 절.
  • DATETIME ASC는 가장 오래된 시간을 기준으로 레코드를 정렬한다.
  • 예를 들어, 다음과 같은 데이터가 있을 경우:위 데이터는 오름차순으로 정렬되어 첫 번째 레코드가 가장 오래된 시간을 나타낸다.
  • DATETIME 2013-10-14 15:38:00 2013-10-23 11:42:00 2013-11-03 15:04:00

5.4 LIMIT

  • 출력되는 결과의 행 개수를 제한.
  • LIMIT 1은 상위 1개의 결과만 반환한다.