mysql group by 取最大,最小值那条记录
Max.Bai
2020-08
目录
经常有需要进行分组后去最大或者最小的那条记录,默认group by 之后max或者min显示的值都是随机的。
网上有记录先排序再guoup by, 结果还是一样,偶尔在一个文章的评论中一位大佬给出了答案,这里记录一下。
0. 表结构
table user
id
name
time_mins -- 在线时长,分钟
login_time -- 登录时间
1. 需求
查询每个用户在线时长最长的一次记录
2. 思路
先排序,name, time_mins 倒序, 关键点来了,加 having 1 目的是让查询结果按组排序的,有网友有详细的解释可以看这个https://blog.youkuaiyun.com/jesseyoung/article/details/40147517
然后group by name, time_mins 结果就会显示最大的了
3. 脚本
select id, name, time_mins
from (
select id, name, time_mins
from user
order by name, time_mins desc
having 1
) a
group by name
在MySQL中,使用GROUP BY获取每组的最大或最小值时,通常需要结合HAVING子句来确保正确选择记录。具体做法是先按照目标字段排序,再通过GROUP BY和HAVING来获取每组的第一个(最小值)或最后一个(最大值)记录。例如,要找到每个用户在线时长最长的一次记录,可以对name和time_mins进行降序排序,然后使用GROUP BY name, time_mins并添加HAVING 1的条件。"
41950625,4839583,手动配置JUnit4.11与hamcrest-core-1.3进行单元测试,"['单元测试', 'JUnit', 'Java', 'hamcrest']
1240





