Mysql 查询分组数据中每组某一数值最大的数据

这篇具有很好参考价值的文章主要介绍了Mysql 查询分组数据中每组某一数值最大的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一、将时间进行排序后再分组

Mysql 查询分组数据中每组某一数值最大的数据

该表表名为customer,  park_id表示园区id,joined_at表示用户的加入时间,created_at表示用户的创建时间。

需求:查出每个园区中,最早加入园区的第一位用户

select * from (select * from customer order by joined_at,created_at asc limit 1000) as tem group by park_id;

查出id为 1和9的两条数据

Mysql 查询分组数据中每组某一数值最大的数据

解题思路:

      【提示】  此处使用 limit 是为了确保,group by分组的时候会按照子查询中输出的排列顺序进行分组。 

        group by 之后拿取的数据,是每个分组中的第一条数据

        所以我们只需要保证将joined_at时间最早的数据排在最前面,当以park_id进行分组操作时,拿到的第一条数据必然是joined_at时间最早的一条。

        (数据重复时的处理)观察表我们可以看到id为1和12的数据都是2020-04-17加入的,但是两者之间他们的创建时间又有先后顺序的区分,id为12的要早一天,所以我们需要的是id为12的。 此刻我们就在排序的时候将created_at的排序加在joined_at后面。

这样就实现了在主要字段joined_at有重复数据的时候,我们按照第二个排序规则created_at字段进行追加排序,并拿取joined_at和created_at时间为最新的

                

方法二、拿取到每组最小时间并进行关联查询

需求:查询出每个园区最早加入的客户信息

select * from customer as c right join (select park_id,min(joined_at) as min_joined_at from customer group by park_id) as tem
on c.park_id=tem.park_id and c.joined_at=tem.min_joined_at;

查询结果:

Mysql 查询分组数据中每组某一数值最大的数据

根据查询可以看出,314园区的两条加入时间最早的数据都被查询了出来。

解题思路:

       1. 子查询是按照park_id进行分组,并使用sql函数min 拿取到每组中加入时间最小的时间min_joined_at。并行程临时表tem

        2. 根据拿取到的每个园区最小的加入时间关联查询,将其和customer表进行关联,按照park_id相等,且用户的加入时间于最小的加入时间min_joined_at相等来拿取对应的数据。

  


总结:由以上两个操作观察可知,

第一个方法更适合拿取按照条件进行分组后数据有重复,但我们仅取一条的需求。或者是有多个排序规则,我们按照多个排序规则进行处理后,拿取其中最匹配的一条。需要注意的一点是oracle并不支持该种方法

方法二更适合按条件分组后没有重复数据,或者有重复数据,且我们是要拿取所有符合条件的重复数据。文章来源地址https://www.toymoban.com/news/detail-479474.html

到了这里,关于Mysql 查询分组数据中每组某一数值最大的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包