今天偶遇一条看似简单,含义很深的SQL语句。
学校有个全校同学的各科成绩表,表中包含名字,分数等。
现在要求要找出每个同学最高的分数是那一科。
SELECT s.id, s.name, s.book_name, s.score
FROM book AS s
RIGHT JOIN (SELECT id, max(score) FROM book GROUP BY `name`) AS g ON s.id = g.id;
例子:
序号 | 姓名 | 学科 | 分数 |
---|---|---|---|
1 | 小明 | 历史 | 50 |
2 | 小明 | 数学 | 30 |
3 | 小明 | 化学 | 60 |
4 | 小明 | 美术 | 80 |
5 | 小红 | 英语 | 90 |
6 | 小红 | 性教育 | 70 |
7 | 小红 | 体育 | 50 |
8 | 小红 | 历史 | 60 |
9 | 小红 | 政治 | 10 |
10 | 小红 | 音乐 | 20 |
11 | 小红 | 计算机 | 30 |
12 | 小黄 | 体育 | 50 |
13 | 小黄 | 化学 | 40 |
14 | 小黄 | 性教育 | 70 |
15 | 小黄 | 计算机 | 90 |
16 | 小花 | 化学 | 80 |
17 | 小花 | 历史 | 50 |
18 | 小花 | 物理 | 30 |
19 | 小花 | 体育 | 30 |
20 | 小花 | 美术 | 80 |
结果:
序号 | 姓名 | 学科 | 分数 |
---|---|---|---|
4 | 小明 | 美术 | 80 |
5 | 小红 | 英语 | 90 |
20 | 小花 | 美术 | 80 |
15 | 小黄 | 计算机 | 90 |