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 중국어 웹사이트의 기타 관련 기사를 참조하세요!