> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 그룹당 상위 N개 행을 검색하는 방법은 무엇입니까?

PostgreSQL에서 그룹당 상위 N개 행을 검색하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-15 10:23:46
원래의
167명이 탐색했습니다.

How to Retrieve the Top N Rows per Group in PostgreSQL?

PostgreSQL: 각 그룹의 상위 N개 행 검색

PostgreSQL에서는 데이터 세트 내의 각 그룹에서 특정 수의 행을 검색해야 하는 경우가 많습니다. 이는 순위가 매겨진 데이터를 처리하거나 카테고리별로 결과를 제한해야 할 때 특히 유용합니다. 예를 들어 각 부서의 상위 3개 제품을 매출 순으로 정렬할 수 있습니다.

예시:

다음 구조와 샘플 데이터가 포함된 products이라는 테이블을 생각해 보세요.

product_id department_id product_name sales
1 1 Product A 100
2 1 Product B 150
3 1 Product C 200
4 1 Product D 250
5 2 Product E 50
6 2 Product F 100
7 3 Product G 120
8 2 Product H 180

목표는 각 department_id에서 판매 기준 상위 2개 제품을 검색하는 것입니다. 예상되는 결과는 다음과 같습니다.

product_id department_id product_name sales
4 1 Product D 250
3 1 Product C 200
8 2 Product H 180
6 2 Product F 100
7 3 Product G 120

ROW_NUMBER()를 사용하는 솔루션(PostgreSQL 8.4 이상):

PostgreSQL 8.4 이상에서는 ROW_NUMBER() 창 기능을 제공하여 효율적인 솔루션을 제공합니다. 다음 쿼리는 작업을 수행합니다.

<code class="language-sql">SELECT product_id, department_id, product_name, sales
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY sales DESC) AS rn,
    product_id, department_id, product_name, sales
  FROM
    products
) ranked_products
WHERE rn <= 2;</code>
로그인 후 복사

이 쿼리는 매출을 기준으로 부서 내 각 제품에 순위(rn)를 할당한 다음 순위가 2 이하인 제품만 포함하도록 필터링합니다.

위 내용은 PostgreSQL에서 그룹당 상위 N개 행을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿