首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中選擇每個群組中的前 N ​​行?

如何在 PostgreSQL 中選擇每個群組中的前 N ​​行?

Susan Sarandon
發布: 2025-01-15 10:46:46
原創
539 人瀏覽過

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>
登入後複製

要擷取按name列排序的每個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對資料進行分區,並在每個分組內按name對行進行排序,它將連續的行號分配給排序後的記錄。最後,外部查詢過濾掉行號大於2的行,有效地為每個section_id選擇前兩行。

以上是如何在 PostgreSQL 中選擇每個群組中的前 N ​​行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板