以下是最简单的示例,尽管任何解决方案都应能够扩展到需要n个顶级结果的地方:
给定下面的表格,其中包含“人员”,“组”和“年龄”列,您将如何获得每个组中年龄最大的2个人?(组内的关系不应产生更多结果,而应按字母顺序给出前两个)
-------- + ------- + ----- + 所需的结果集:
-------- + ------- + ----- + | 肖恩| 1 | 42 | | 吉尔| 1 | 34 | | 劳拉| 2 | 39 | | 保罗| 2 | 36 |
select * from (select * from mytable order by Group
, Age desc, Person) x group by Group
我希望能够以此为基础,尽管我不知道如何做到。
这是使用的一种方法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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。