MySQL根据某字段分组(group by)之后再根据另外的字段排序(order by)
Posted 爱锅巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL根据某字段分组(group by)之后再根据另外的字段排序(order by)相关的知识,希望对你有一定的参考价值。
表数据
user_score表数据如下,是一张记录人名、成绩和科目对应的表
mysql> select * from user_score;
+----+--------+-------+---------+
| id | name | score | course |
+----+--------+-------+---------+
| 1 | 张三 | 93 | 语文 |
| 2 | 李四 | 96 | 语文 |
| 3 | 张三 | 88 | 数学 |
| 4 | 李四 | 85 | 数学 |
| 5 | 王五 | 88 | 数学 |
+----+--------+-------+---------+
需求:查询每门课的最高成绩和人
SELECT u.* FROM user_score u,
(SELECT max( score ) max_score, course
FROM user_score GROUP BY course) t
WHERE u.course = t.course AND u.score = t.max_score
或者使用关联查询,在表数据量大的时候join(inner join和join是一样的)查询有优势
SELECT u.* FROM user_score u INNER JOIN
(SELECT max( score ) max_score, course
FROM user_score GROUP BY course) t
ON u.course = t.course AND u.score = t.max_score
查询结果:
+----+--------+-------+---------+
| id | name | score | course |
+----+--------+-------+---------+
| 2 | 李四 | 96 | 语文 |
| 3 | 张三 | 88 | 数学 |
| 5 | 王五 | 88 | 数学 |
+----+--------+-------+---------+
分析:
如果要查所有课程的最好成绩那么首先需要根据课程分组(group by),然后找出最好成绩,可能会想到用max之类的函数,如果单纯查询每门课的最高成绩,不用列出其他字段(例如name)的话这样做是没问题的,但是需要其他字段这样查询就会有问题
以上是关于MySQL根据某字段分组(group by)之后再根据另外的字段排序(order by)的主要内容,如果未能解决你的问题,请参考以下文章
MYsql5.7版本之后,用group by查询不在分组字段遇到的坑