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

PostgreSQL의 각 그룹 내에서 상위 N개 행을 선택하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-15 10:46:46533검색

How to Select the Top N Rows within Each Group in PostgreSQL?

PostgreSQL에서 LIMIT 그룹화를 사용하여 그룹 내 행 선택

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

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