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中文網其他相關文章!