提取 MySQL 中每組的前 N 行
需要取得 MySQL 資料中每個群組的前 N 行嗎? 標準訂購可能並不總是能為您帶來預期的結果。 本指南展示如何使用 MySQL 強大的視窗函數,例如 ROW_NUMBER
、RANK
和 DENSE_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中文網其他相關文章!