Mysql GROUP BY查询每组某值最大的一条数据

 更新时间:2023年08月11日 15:04:31   作者:芥焉丶  
这篇文章主要介绍了Mysql GROUP BY查询每组某值最大的一条数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Mysql GROUP BY查询每组某值最大的一条数据

表结构如下

需求

查询每个学科(type)最高分(score)

想要的结果如下:

尝试通过group by order by 查询 sql 如下

SELECT * FROM `reports`  GROUP BY type ORDER BY score DESC;

结果如下:

order by 是在最后执行并不能查询到想要的结果

尝试通过group by 排序后的子查询 sql 如下

SELECT
	a.* 
FROM
	( SELECT * FROM `reports` ORDER BY score DESC) AS a 
GROUP BY
	a.type;

结果如下:

并没有得道正确的结果

然后查询资料看到有博客说需要在子查询加上limit,如下sql:

SELECT
	a.* 
FROM
	( SELECT * FROM `reports` ORDER BY score DESC LIMIT 10) AS a 
GROUP BY
	a.type;

结果如下:

结果是对了,但是总觉得奇怪,为什么要加 limit ,这不是我想要的

###尝试通过聚合函数查询,sql如下:

SELECT
  s.*,	max( s.score ) 
FROM
	( SELECT * FROM `reports`  GROUP BY type, name ORDER BY score DESC ) s 
GROUP BY
	s.type

结果如下:

搞定max( s.score ) 亦可拿掉

Mysql group by分组后每组选取一条结果

直接说思路

  • 按照某个字段进行分组
  • 选出你想要的结果
  • 回表查询

举个栗子

需求:

查询订单表(id, user_id, create_time, update_time),按照user_id分组,查询该表中,每个用户最新的一条订单(表中update_time最大的)

select * 
from order ss, (select MAX(sa.update_time) as time, sa.user_id FROM order sa where sa.user_id is not null GROUP BY sa.user_id) aa 
where ss.user_id = sa.user_id and ss.update_time = sa.time

**MAX(sa.update_time)**就是第二步,按照你的业务需求,查出你想要的结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅析mysql 共享表空间与独享表空间以及他们之间的转化

    浅析mysql 共享表空间与独享表空间以及他们之间的转化

    本篇文章是对mysql 共享表空间与独享表空间以及他们之间的转化进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL如何运行sql文件图文详解(以Navicat做演示)

    MySQL如何运行sql文件图文详解(以Navicat做演示)

    Navicat是MySQL非常好用的可视化管理工具,功能非常强大,能满足我们日常数据库开发的所有需求,这篇文章主要给大家介绍了关于MySQL如何运行sql文件(以Navicat做演示)的相关资料,需要的朋友可以参考下
    2024-08-08
  • MySQL中获取当前时间格式的方法汇总

    MySQL中获取当前时间格式的方法汇总

    在MySQL数据库开发中,获取时间是一个常见的需求,MySQL提供了多种方法来获取当前日期、时间和时间戳,并且可以对时间进行格式化、计算和转换,以下是一些常用的MySQL时间函数及其示例,需要的朋友可以参考下
    2024-06-06
  • MySQL中的log_bin_trust_function_creators系统变量

    MySQL中的log_bin_trust_function_creators系统变量

    本文主要介绍了MySQL中的log_bin_trust_function_creators系统变量,log_bin_trust_function_creators是一个全局系统变量,下面就来介绍一下具体使用,感兴趣的可以了解一下
    2024-09-09
  • MySQL 查找价格最高的图书经销商的几种SQL语句

    MySQL 查找价格最高的图书经销商的几种SQL语句

    不同的图书,在不同的经销商的价格不同,我们这里要找到每种图书最高的经销商是谁? 找最低的类似了。
    2009-07-07
  • MySQL数据库被锁定的问题解决

    MySQL数据库被锁定的问题解决

    本文主要介绍了MySQL数据库被锁定的问题解决方法,包括通过刷新错误连接、修改max_connection_errors的数量、执行flush host或者 mysqladmin flush-hosts等方式进行解决,感兴趣的可以了解一下
    2024-10-10
  • 关于skip_name_resolve参数的总结分享

    关于skip_name_resolve参数的总结分享

    下面小编就为大家带来一篇关于skip_name_resolve参数的总结分享。小编觉得挺不错的,现在分享给大家。给大家一个参考。一起跟随小编过来看看吧
    2016-03-03
  • mysql 5.7.5 m15 winx64.zip安装教程

    mysql 5.7.5 m15 winx64.zip安装教程

    这篇文章主要为大家详细介绍了mysql 5.7.5 m15 winx64.zip安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Linux安装MySQL的教程

    Linux安装MySQL的教程

    这篇文章主要介绍了Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • MySQL聚合查询COUNT、SUM、AVG用法实战案例指南

    MySQL聚合查询COUNT、SUM、AVG用法实战案例指南

    本文主要讲述了MySQL中最常用的聚合函数:COUNT、SUM、AVG的用法、场景和避免误区的方法,通过实战案例深入剖析了每个函数的适用场景和注意事项,感兴趣的朋友跟随小编一起看看吧
    2026-05-05

最新评论