当前位置:   article > 正文

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

mysql分组取出每组最大一条

表结构如下:

表结构如图

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

想要的结果如下:
正确结果如图

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

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

结果如下:
在这里插入图片描述
order by 是在最后执行并不能查询到想要的结果

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

SELECT
	a.* 
FROM
	( SELECT * FROM `reports` ORDER BY score DESC) AS a 
GROUP BY
	a.type;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下:
在这里插入图片描述
并没有得道正确的结果
然后查询资料看到有博客说需要在子查询加上limit,如下sql:

SELECT
	a.* 
FROM
	( SELECT * FROM `reports` ORDER BY score DESC LIMIT 10) AS a 
GROUP BY
	a.type;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下:
在这里插入图片描述
结果是对了,但是总觉得奇怪,为什么要加 limit ,这不是我想要的

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

SELECT
  s.*,	max( s.score ) 
FROM
	( SELECT * FROM `reports`  GROUP BY type, name ORDER BY score DESC ) s 
GROUP BY
	s.type
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果如下:
在这里插入图片描述
搞定
max( s.score ) 亦可拿掉

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/952746
推荐阅读
相关标签
  

闽ICP备14008679号