首頁 >資料庫 >mysql教程 >如何限制 PostgreSQL 中每個群組內的行數?

如何限制 PostgreSQL 中每個群組內的行數?

DDD
DDD原創
2025-01-15 12:09:45554瀏覽

How to Limit Rows Within Each Group in PostgreSQL?

PostgreSQL 分組限制:顯示每個分組中的前 N ​​行

資料庫中經常需要從特定分組中提取有限數量的行。在 PostgreSQL 中,可以使用 LIMIT 子句結合分組運算來滿足此需求。

以下範例示範了需要在每個 section_id 分組中檢索前兩行(按 name 列排序)的需求。例如,從給定的表中:

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

我們希望得到以下結果:

<code> id | section_id | name
----+------------+------
  1 |          1 | A
  2 |          1 | B
  5 |          2 | E
  6 |          2 | F
  7 |          3 | G</code>

在 8.4 之前的 PostgreSQL 版本中,缺乏內建函數來有效處理此類查詢。然而,在 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>

此解決方案利用 ROW_NUMBER() 視窗函數為每個 section_id 分區內的每一行分配一個順序號。 ORDER BY 子句指定排序條件(在本例中為 name)。然後將 LIMIT 2 條件套用於子查詢,將結果限制為每個分組的前兩行(按 name 排序)。

以上是如何限制 PostgreSQL 中每個群組內的行數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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