开发者社区> 问答> 正文

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

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

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

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

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

展开
收起
保持可爱mmm 2020-05-08 11:06:04 583 0
1 条回答
写回答
取消 提交回答
  • 在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,因此,要使此功能生效,您一定不要具有此选项(编辑服务器的选项文件以删除此设置)。

    2020-05-08 11:06:12
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载