在mysql中有一种超简单的方法:
select * from (select * from mytable order by `Group`, age desc, Person) xgroup by `Group`
这工作,因为在MySQL中你被允许 不 聚集非组逐列,在这种情况下,MySQL的只是返回的 第一
排。解决方案是首先对数据进行排序,以便对于每个组,您要的行都排在第一位,然后对要为其提供值的列进行分组。
您可以避免尝试查找
max()等的复杂子查询,也可以避免在存在多个具有相同最大值的行时返回多个行的问题(如其他答案那样)
注意: 这是 仅mysql 解决方案。我知道的所有其他数据库都会引发SQL语法错误,并显示消息“ group
by子句中未列出未聚合的列”或类似消息。由于此解决方案使用了 未记录的
行为,因此更为谨慎的做法可能是包括一个测试,以断言如果将来的MySQL版本更改此行为,它 仍然可以 正常工作。
5.7版更新:
从5.7版开始,默认情况下
sql-mode包含该设置
ONLY_FULL_GROUP_BY,因此,要使此功能生效,您一定 不要
具有此选项(编辑服务器的选项文件以删除此设置)。



