>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 각 그룹 내의 행을 제한하는 방법은 무엇입니까?

PostgreSQL에서 각 그룹 내의 행을 제한하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-15 12:09:45558검색

How to Limit Rows Within Each Group in PostgreSQL?

PostgreSQL 그룹화 제한: 각 그룹의 처음 N 행 표시

데이터베이스에서는 특정 그룹에서 제한된 수의 행을 추출해야 하는 경우가 많습니다. PostgreSQL에서는 그룹화 작업과 함께 LIMIT 절을 사용하여 이 요구 사항을 충족할 수 있습니다.

다음 예에서는 각 section_id 그룹화에서 처음 두 행(이름 열을 기준으로 정렬)을 검색해야 함을 보여줍니다. 예를 들어, 주어진 테이블에서:

<code> id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  3 |          1 | C
  4 |          1 | D
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G
  8 |          2 | H</code>

우리는 다음과 같은 결과를 얻고 싶습니다:

<code> id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G</code>

8.4 이전 PostgreSQL 버전에서는 이러한 쿼리를 효율적으로 처리할 수 있는 내장 함수가 부족했습니다. 그러나 PostgreSQL 8.4 이상에서는 다음과 같은 새로운 솔루션이 등장했습니다.

<code class="language-sql">SELECT *
FROM (
  SELECT ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r, t.*
  FROM xxx t
) x
WHERE x.r <= 2;</code>

이 솔루션은 ROW_NUMBER() 창 함수를 활용하여 각 section_id 파티션 내의 각 행에 시퀀스 번호를 할당합니다. ORDER BY 절은 정렬 기준(이 경우 이름)을 지정합니다. 그런 다음 LIMIT 2 조건이 하위 쿼리에 적용되어 결과를 각 그룹의 처음 두 행( name 기준으로 정렬)으로 제한합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.