首頁 > 資料庫 > mysql教程 > 如何在MySQL中的每個組獲取頂部N行?

如何在MySQL中的每個組獲取頂部N行?

DDD
發布: 2025-01-25 12:11:08
原創
312 人瀏覽過

How to Get the Top N Rows for Each Group in MySQL?

提取 MySQL 中每組的前 N ​​行

需要取得 MySQL 資料中每個群組的前 N ​​行嗎? 標準訂購可能並不總是能為您帶來預期的結果。 本指南展示如何使用 MySQL 強大的視窗函數,例如 ROW_NUMBERRANKDENSE_RANK 來有效地實現此目的。

想像一個包含 PKID(主鍵)、CATID(類別)和 value 欄位的表。若要取得每個 CATID 的前 5 行,請使用 ROW_NUMBER 函數:

<code class="language-sql">SELECT PKID, CATID, value,
ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum
FROM table_name;</code>
登入後複製

ROW_NUMBER 在每個 CATID 組內分配一個唯一的排名,按 value 排序(在本例中為降序)。 若要僅過濾前 5 個,請將其包裝在子查詢中:

<code class="language-sql">SELECT PKID, CATID, value
FROM (
  SELECT PKID, CATID, value,
  ROW_NUMBER() OVER (PARTITION BY CATID ORDER BY value DESC) AS RowNum
  FROM table_name
) AS subquery
WHERE RowNum <= 5;</code>
登入後複製

這種精細化查詢僅有效檢索每個類別的前 5 行,為您的資料檢索需求提供精確且最佳化的解決方案。 請記得調整 <= 5 條件來控制每組所需的頂行數。

以上是如何在MySQL中的每個組獲取頂部N行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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