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

表结构如下:

Mysql GROUP BY 查询每组某值最大的一条数据_第1张图片

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

想要的结果如下:
Mysql GROUP BY 查询每组某值最大的一条数据_第2张图片

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

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

结果如下:
Mysql GROUP BY 查询每组某值最大的一条数据_第3张图片
order by 是在最后执行并不能查询到想要的结果

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

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

结果如下:
Mysql GROUP BY 查询每组某值最大的一条数据_第4张图片
并没有得道正确的结果
然后查询资料看到有博客说需要在子查询加上limit,如下sql:

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

结果如下:
Mysql GROUP BY 查询每组某值最大的一条数据_第5张图片
结果是对了,但是总觉得奇怪,为什么要加 limit ,这不是我想要的

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

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

结果如下:
Mysql GROUP BY 查询每组某值最大的一条数据_第6张图片
搞定
max( s.score ) 亦可拿掉

你可能感兴趣的:(Mysql,mysql,数据库,sql)