MySql - group by 取最大,最小值那条记录

在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']

mysql group by 取最大,最小值那条记录

Max.Bai
2020-08

目录

mysql group by 取最大,最小值那条记录

0. 表结构

1. 需求

2. 思路

3. 脚本


经常有需要进行分组后去最大或者最小的那条记录,默认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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值