如何用ORDER BY对MySQL中同名学生的分数求和?

为此,将ORDER BY与GROUP BY子句一起使用。我们首先创建一个带有学生姓名和分数的表格-

mysql> create table countRowValueDemo
   -> (
   -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> StudentName varchar(20),
   -> StudentMathScore int
   -> );

以下是使用insert命令在表中插入记录的查询-

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('Larry',45);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('Mike',56);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('John',60);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('David',40);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('David',70);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('John',80);

mysql> insert into countRowValueDemo(StudentName,StudentMathScore) values('David',88);

以下是使用select语句显示表中所有记录的查询-

mysql> select * from countRowValueDemo;

这将产生以下输出-

+-----------+-------------+------------------+
| StudentId | StudentName | StudentMathScore |
+-----------+-------------+------------------+
| 1         | Larry       | 45               |
| 2         | Mike        | 56               |
| 3         | John        | 60               |
| 4         | David       | 40               |
| 5         | David       | 70               |
| 6         | John        | 80               |
| 7         | David       | 88               |
+-----------+-------------+------------------+
7 rows in set (0.00 sec)

情况1:降序(总和)

以下是对名称相似的学生的分数求和的查询。结果将以降序显示-

mysql> select StudentName,
   -> sum(StudentMathScore) AS TOTAL_SCORE
   -> from countRowValueDemo
   -> group by StudentName
   -> order by sum(StudentMathScore) desc;

这将产生以下输出-

+-------------+-------------+
| StudentName | TOTAL_SCORE |
+-------------+-------------+
| David       | 198         |
| John        | 140         |
| Mike        | 56          |
| Larry       | 45          |
+-------------+-------------+
4 rows in set (0.00 sec)

情况2:升序(总和)

以下是对名称相似的学生的分数求和的查询。结果将以降序显示-

mysql> select StudentName,
   -> sum(StudentMathScore) AS TOTAL_SCORE
   -> from countRowValueDemo
   -> group by StudentName
   -> order by sum(StudentMathScore);

这将产生以下输出-

+-------------+-------------+
| StudentName | TOTAL_SCORE |
+-------------+-------------+
| Larry       | 45          |
| Mike        | 56          |
| John        | 140         |
| David       | 198         |
+-------------+-------------+
4 rows in set (0.00 sec)