首頁 > 資料庫 > mysql教程 > 如何在 PostgreSQL 中檢索每組的前 N ​​行?

如何在 PostgreSQL 中檢索每組的前 N ​​行?

Barbara Streisand
發布: 2025-01-15 10:23:46
原創
167 人瀏覽過

How to Retrieve the Top N Rows per Group in PostgreSQL?

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

PostgreSQL 通常需要從資料集中的每個群組中檢索特定數量的行。當處理排名資料或需要限制每個類別的結果時,這特別有用。 例如,您可能想要每個部門的前 3 個產品,按銷售額排序。

範例:

考慮一個名為 products 的表,其結構和範例資料如下:

product_id department_id product_name sales
1 1 Product A 100
2 1 Product B 150
3 1 Product C 200
4 1 Product D 250
5 2 Product E 50
6 2 Product F 100
7 3 Product G 120
8 2 Product H 180

目標是從每個 department_id 中檢索排名前 2 的產品(基於銷售額)。 預期結果將是:

product_id department_id product_name sales
4 1 Product D 250
3 1 Product C 200
8 2 Product H 180
6 2 Product F 100
7 3 Product G 120

使用 ROW_NUMBER() 的解決方案(PostgreSQL 8.4 及更高版本):

PostgreSQL 8.4及以上版本提供了ROW_NUMBER()視窗函數,提供了高效的解決方案。 以下查詢完成任務:

<code class="language-sql">SELECT product_id, department_id, product_name, sales
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY sales DESC) AS rn,
    product_id, department_id, product_name, sales
  FROM
    products
) ranked_products
WHERE rn <= 2;</code>
登入後複製

此查詢根據銷售額為其部門內的每個產品分配排名 (rn),然後進行篩選以僅包含排名小於或等於 2 的產品。

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

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