首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板