首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中有效率地取得每個群組中的前 N ​​行?

如何在 PostgreSQL 中有效率地取得每個群組中的前 N ​​行?

Barbara Streisand
Barbara Streisand原創
2025-01-15 11:05:45440瀏覽

How to Efficiently Fetch the First N Rows Within Each Group in PostgreSQL?

PostgreSQL:擷取每組中的前 N ​​行

PostgreSQL 中的一項常見任務涉及從每個群組中選擇一定數量的行。這可以使用通常稱為“分組限制”的技術有效地實現。 以下是如何使用視窗函數(在 PostgreSQL 8.4 及更高版本中提供)來實現此目的:

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

說明:

ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) 視窗函數為每個 rn 群組中的每一行分配一個唯一的排名 (section_id),按 name 列排序。 然後,外部查詢過濾這些結果,僅保留排名 (rn) 小於或等於 N 的行(將 N 替換為您所需的每組行數)。 這有效地將結果限制為每個組的頂部 N 行。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn