집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 각 그룹 내의 행을 제한하는 방법은 무엇입니까?
데이터베이스에서는 특정 그룹에서 제한된 수의 행을 추출해야 하는 경우가 많습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!