今天偶遇一条看似简单,含义很深的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 |
本文介绍了一种使用SQL语句来查找每位学生所获得最高分数的科目的方法。通过一个具体的例子展示了如何从一个包含所有学生各科成绩的表中筛选出每个学生的最高分科目。
10万+

被折叠的 条评论
为什么被折叠?



