首页 > 数据库 > mysql教程 > 如何从分组数据中有效提取最高的N记录?

如何从分组数据中有效提取最高的N记录?

Barbara Streisand
发布: 2025-01-25 10:05:09
原创
296 人浏览过

How to Efficiently Extract the Top N Records from Grouped Data?

高效提取分组数据中的顶级记录

假设有一个结构化数据集,包含人员、分组和年龄等列,本文探讨如何根据年龄在每个分组中获取前N个个体。

预期结果:

目标是在每个组中检索年龄最大的两个个人,如果年龄相同则按姓名字母顺序排列。

现有解决方案:

先前的方法(受@Bohemian提出的查询启发)为每个组检索单个顶级行:

<code class="language-sql">select * 
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`</code>
登录后复制

使用UNION的增强解决方案:

扩展此功能的一种方法是使用UNION ALL运算符,从而能够为每个组检索指定数量的记录:

<code class="language-sql">(
  select *
  from mytable 
  where `group` = 1
  order by age desc
  LIMIT 2
)
UNION ALL
(
  select *
  from mytable 
  where `group` = 2
  order by age desc
  LIMIT 2
)</code>
登录后复制

使用行号的替代方法:

另一种方法是为每条记录生成一个行号,然后根据此行号进行筛选:

<code class="language-sql">select person, `group`, age
from 
(
   select person, `group`, age,
      (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number 
  from test t
  CROSS JOIN (select @num:=0, @group:=null) c
  order by `Group`, Age desc, person
) as x 
where x.row_number <= 2;</code>
登录后复制

结论:

根据具体的要求和数据特征,UNION和行号技术都提供了有效的解决方案,用于在分组结果中检索顶级记录。

以上是如何从分组数据中有效提取最高的N记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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