首頁 > 資料庫 > mysql教程 > 如何在 SQL 中取得每組的前 N ​​行?

如何在 SQL 中取得每組的前 N ​​行?

Linda Hamilton
發布: 2025-01-25 12:07:09
原創
871 人瀏覽過

How to Get the Top N Rows per Group in SQL?

SQL技巧:按組獲取前N行數據

本文介紹如何高效地從SQL數據庫中提取每個分組的前N行數據。我們將使用窗口函數,例如ROW_NUMBER()、RANK()和DENSE_RANK(),實現這一目標。這些函數能夠在指定的分區內生成唯一的標識符,非常適合進行分組和行選擇。

使用ROW_NUMBER()

ROW_NUMBER()函數為每個分區內的行分配從1開始的連續序號。

<code class="language-sql">SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY rate DESC) AS rn
FROM h
WHERE year BETWEEN 2000 AND 2009</code>
登入後複製

此示例中,ROW_NUMBER()創建了一個名為“rn”的新列,為每個id分組內的行分配序號。

使用RANK()和DENSE_RANK()

RANK()和DENSE_RANK()函數提供了另一種對分組內行進行編號的方法。 RANK()為具有相同排序的行分配非重複值,而DENSE_RANK()分配連續值。

<code class="language-sql">SELECT *, RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS rk,
DENSE_RANK() OVER (PARTITION BY id ORDER BY rate DESC) AS dr
FROM h
WHERE year BETWEEN 2000 AND 2009</code>
登入後複製

RANK()和DENSE_RANK()分別創建了“rk”和“dr”列,表示每個行在其id分組內的排名和密集排名。

結合LIMIT或TOP限制結果

為每個分組分配唯一標識符後,可以使用LIMIT或TOP修飾符來僅檢索每個分組的指定行數。

<code class="language-sql">SELECT *
FROM h
WHERE year BETWEEN 2000 AND 2009
ORDER BY id, rate DESC
LIMIT 5</code>
登入後複製

此示例中,LIMIT修飾符檢索每個id分組的前5行。您可以根據需要調整數字。

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

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