0Pricing
SQL Academy · 강의

상위 N개 레코드 찾기

가장 높은 값과 가장 낮은 값을 가져옵니다.

상위 N개 레코드 찾기은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

상위 N 질의란

상위 N 질의는 "가장 비싼 상품 3개", "가장 최근 주문 10개" 또는 "가장 낮은 점수 5개"와 같은 질문에 답합니다.

정렬과 제한을 조합한 것뿐이지만, 매우 자주 사용되므로 별도의 이름이 있습니다.

-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;

하위 N 레코드

가장 작은 값을 찾으려면 방향을 반대로 바꾸십시오. ASC로 정렬한 다음 처음 N개를 가져오면 가장 저렴하거나 오래되었거나 값이 가장 낮은 행을 얻을 수 있습니다.

-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;

동률 해소 기준 추가

여러 행이 기준값에서 동률이면 데이터베이스는 그중 하나를 임의로 선택합니다. 결과를 일관되고 재현 가능하게 만들려면 고유한 보조 키를 추가하십시오.

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;

조건 적용 후 상위 N

상위 N은 조건을 적용한 집합을 대상으로 동작합니다. 먼저 WHERE 절로 후보를 제한한 다음 정렬하고 개수를 제한하십시오.

이렇게 하면 '도서' 카테고리에서 가장 비싼 상품 3개를 찾을 수 있습니다.

SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;

집계 후 상위 N

계산된 값의 순위를 매길 수도 있습니다. 그룹화하고 집계한 다음 집계 결과를 정렬하고 개수를 제한하십시오.

이렇게 하면 전체 지출액이 가장 큰 고객 5명을 반환합니다.

SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;

순위 함수 방식

ROW_NUMBER()와 같은 창 함수는 각 행에 순위를 할당합니다. 질의를 감싼 뒤 순위가 작은 행만 남기십시오. 이 방식은 "그룹별 상위 N"에도 확장할 수 있습니다.

SELECT name, price
FROM (
  SELECT name, price,
         ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
  FROM products
) ranked
WHERE rn <= 3;

동률 처리에서 RANK와 ROW_NUMBER 비교

ROW_NUMBER()는 항상 서로 다른 번호를 부여하므로 동률이 있어도 정확히 N개 행을 반환합니다. RANK()는 동률인 행에 같은 번호를 부여하므로 3위에서 동률이 발생하면 "상위 3개"가 3개를 초과할 수 있습니다.

SELECT name, price,
       RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;

그룹별 상위 N

각 카테고리에서 상위 상품을 얻으려면 카테고리별로 순위를 나누십시오. PARTITION BY는 각 그룹마다 번호 매기기를 다시 시작합니다.

SELECT category, name, price
FROM (
  SELECT category, name, price,
         ROW_NUMBER() OVER (
           PARTITION BY category
           ORDER BY price DESC
         ) AS rn
  FROM products
) t
WHERE rn = 1;

그룹별 한 행을 위한 DISTINCT ON

PostgreSQL의 DISTINCT ON은 그룹별 상위 행을 선택하는 간결한 방법입니다. 그룹화 열을 나열한 다음, 원하는 행이 각 그룹 안에서 먼저 나오도록 정렬하십시오.

SELECT DISTINCT ON (category)
       category, name, price
FROM products
ORDER BY category, price DESC;

WITH TIES로 동률 포함

상위 3개뿐 아니라 3위와 동률인 행도 모두 원한다면 표준 FETCH ... WITH TIES를 사용하십시오. 3개 행과 함께 마지막 행과 동률인 추가 행도 반환합니다.

SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;

단일 최상위 값

가장 높거나 가장 낮은 행 하나만 필요하다면 ORDER BY ... LIMIT 1이 가장 단순한 방식입니다. MAX()를 사용하는 하위 질의보다 명확하고 더 빠른 경우가 많습니다.

-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;

빠른 확인

상위 3개 가격을 원하지만, 3위에서 동률이면 모두 포함하려고 합니다.

복습

이제 중요한 모든 방식으로 상위 N 레코드를 찾을 수 있습니다:

  • 간단한 상위 또는 하위 목록에는 ORDER BY ... LIMIT n
  • 일관된 결과를 위해 고유한 동률 해소 기준 추가
  • 그룹별 상위 N에는 ROW_NUMBER() 또는 DISTINCT ON
  • 동률인 행을 유지하려면 FETCH ... WITH TIES

이로써 정렬, 제한, 상위 N 학습을 마쳤습니다. 이제 어떤 결과 집합에도 실제 순서를 부여할 수 있습니다.

SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;

자주 묻는 질문

“상위 N개 레코드 찾기” 강의는 무료인가요?

네 — “상위 N개 레코드 찾기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“상위 N개 레코드 찾기”에서 뭘 배우나요?

가장 높은 값과 가장 낮은 값을 가져옵니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“상위 N개 레코드 찾기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. ORDER BY로 정렬하기
  2. 여러 열을 기준으로 정렬하기
  3. LIMIT와 OFFSET
  4. 상위 N개 레코드 찾기
← SQL Academy(으)로 돌아가기