开发者社区> 问答> 正文

获取每组分组结果的前n条记录

以下是最简单的示例,尽管任何解决方案都应能够扩展到需要n个顶级结果的地方:

给定下面的表格,其中包含“人员”,“组”和“年龄”列,您将如何获得每个组中年龄最大的2个人?(组内的关系不应产生更多结果,而应按字母顺序给出前两个)

  • -------- + ------- + ----- + | 人 集团| 年龄|
  • -------- + ------- + ----- + | 鲍勃| 1 | 32 | | 吉尔| 1 | 34 | | 肖恩| 1 | 42 | | 杰克 2 | 29 | | 保罗| 2 | 36 | | 劳拉| 2 | 39 |
  • -------- + ------- + ----- + 所需的结果集:

  • -------- + ------- + ----- + | 肖恩| 1 | 42 | | 吉尔| 1 | 34 | | 劳拉| 2 | 39 | | 保罗| 2 | 36 |

  • -------- + ------- + ----- + 注意:这个问题建立在先前的问题上- 获取每组分组的SQL结果的最大值的记录 -用于从每组中获取一个顶行,并且从@Bohemian那里收到了一个MySQL特有的答案:

select * from (select * from mytable order by Group, Age desc, Person) x group by Group 我希望能够以此为基础,尽管我不知道如何做到。

展开
收起
保持可爱mmm 2020-05-08 10:29:08 311 0
1 条回答
写回答
取消 提交回答
  • 这是使用的一种方法UNION ALL(请参阅带有演示的SQL Fiddle)。这适用于两个组,如果您有两个以上的组,则需要指定group数字并为每个组添加查询group:

    ( 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 )来源:stack overflow

    2020-05-08 10:30:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载