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中文網其他相關文章!