微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取每组分组的SQL结果的最大值的记录

如何解决获取每组分组的SQL结果的最大值的记录

MysqL中有一种超简单的方法

select * 
from (select * from mytable order by `Group`, age desc, Person) x
group by `Group`

这工作,因为在MysqL中你被允许 聚集非组逐列,在这种情况下,MysqL的只是返回的 第一 排。解决方案是首先对数据进行排序,以便对于每个组,您要的行都排在第一位,然后对要为其提供值的列进行分组。

您可以避免尝试查找max()等的复杂子查询,也可以避免在存在多个具有相同最大值的行时返回多个行的问题(如其他答案那样)

这是 MysqL 解决方案。我知道的所有其他数据库都会引发sql语法错误,并显示消息“ group by子句中未列出未聚合的列”或类似消息。由于此解决方案使用了 未记录的 行为,因此更为谨慎的做法可能是包括一个测试,以断言如果将来的MysqL版本更改此行为,它 仍然可以 正常工作。

5.7版更新:

从5.7版开始,认情况下sql-mode包含该设置ONLY_FULL_GROUP_BY,因此,要使此功能生效,您一定 不要 具有此选项(编辑服务器的选项文件删除此设置)。

解决方法

如何获得包含每个分组集最大值的行?

我在这个问题上看到了一些过于复杂的变体,但都没有一个很好的答案。我尝试将最简单的示例放在一起:

给定下面的表格,其中包含“人员”,“组”和“年龄”列,您将如何获得每个组中年龄最大的人?(组内的平局应该给出第一个字母顺序的结果)

Person | Group | Age
---
Bob  | 1     | 32  
Jill | 1     | 34  
Shawn| 1     | 42  
Jake | 2     | 29  
Paul | 2     | 36  
Laura| 2     | 39

所需的结果集:

Shawn | 1     | 42    
Laura | 2     | 39

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。