首頁 >資料庫 >mysql教程 >如何在 PostgreSQL 中選擇按特定列排序的每組前 N 行?

如何在 PostgreSQL 中選擇按特定列排序的每組前 N 行?

Susan Sarandon
Susan Sarandon原創
2025-01-15 11:19:45249瀏覽

How to Select the Top N Rows per Group Ordered by a Specific Column in PostgreSQL?

PostgreSQL中的分組限制:依自訂列排序選擇每個群組中的前N行

為了根據自訂列順序檢索每個群組中的前N行,PostgreSQL為使用者(特別是使用PostgreSQL 8.4以上版本的使用者)提供了一種解決方案。

考慮包含列'id'、'section_id'和'name'的範例表:

id section_id name
1 1 A
2 1 B
3 1 C
4 1 D
5 2 E
6 2 F
7 3 G
8 2 H

根據提供的數據,所需輸出是為每個'section_id'選擇前兩行(按'name'排序)。

PostgreSQL 8.4以上版本的解決方案

<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>

這段高階解決方案利用帶有'PARTITION BY'和'ORDER BY'子句的'ROW_NUMBER()'函數來實現所需的結果集。 'xxx'表中的每一行都在其各自的'section_id'組內分配一個排名,行按'name'排序。透過基於條件'x.r

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

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