집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 각 그룹 내에서 상위 N개 행을 선택하는 방법은 무엇입니까?
PostgreSQL에서는 창 함수와 PARTITION BY 절을 사용하여 각 그룹화의 처음 N 행을 검색할 수 있습니다. 이 기술은 각 그룹의 행을 특정 열을 기준으로 정렬해야 할 때 특히 유용합니다.
다음 형식을 고려하세요.
<code class="language-sql">CREATE TABLE xxx ( id SERIAL PRIMARY KEY, section_id INT, name VARCHAR(255) ); INSERT INTO xxx (id, section_id, name) VALUES (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>
이름 열을 기준으로 정렬된 각 section_id의 처음 두 행을 추출하려면 다음 쿼리를 사용할 수 있습니다.
<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() 창 함수를 사용하여 1부터 시작하여 각 그룹에 고유한 행 번호를 할당합니다. section_id로 데이터를 분할하고 각 그룹 내에서 행을 이름별로 정렬하여 정렬된 레코드에 연속된 행 번호를 할당합니다. 마지막으로 외부 쿼리는 행 번호가 2보다 큰 행을 필터링하여 각 section_id에 대해 처음 두 행을 효과적으로 선택합니다.
위 내용은 PostgreSQL의 각 그룹 내에서 상위 N개 행을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!