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中文网其他相关文章!