首页 > 数据库 > mysql教程 > 如何在SQL中选择每个组的前N行?

如何在SQL中选择每个组的前N行?

Barbara Streisand
发布: 2024-12-31 08:42:10
原创
707 人浏览过

How to Select the Top N Rows for Each Group in SQL?

SQL 中每个组的前 N ​​行

在 SQL 中,可以使用窗口函数来完成为每个组选择前 N 行。窗口函数允许对一组行(称为窗口)执行计算,这些行由指定的排序和分区定义。在本例中,我们希望为每个组选择前两行,这可以通过以下步骤来实现:

  1. 对数据进行分区: 定义您要针对的组想要使用 PARTITION BY 子句选择顶部行。在此示例中,我们希望按 NAME 列对数据进行分组。
  2. 对每个组中的行进行排名: 使用 ROW_NUMBER() 窗口函数为每个组中的每一行分配一个序号每个组,从 1 开始。这将为我们提供该组中每一行的排名。
  3. 过滤顶部rows: 应用过滤器仅选择排名为 1 或 2 的行。这将为我们提供每组的前两行。

以下是实现这些的示例查询步骤:

SELECT *
FROM (
    SELECT *, RANK() OVER (PARTITION BY NAME ORDER BY SCORE DESC) AS row_rank
    FROM test
) AS ranked
WHERE row_rank <= 2
登录后复制

此查询将产生所需的输出,如下所示:

NAME    SCORE
-----------------
willy       2
willy       3
zoe         5
zoe         6
登录后复制

以上是如何在SQL中选择每个组的前N行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板