假设数据表 examinationiɡ 有以下数据:+----+------+---------+--------+
| id | name | subject | number |
+----+------+---------+--------+
| 1 | A | 数学 | 100 |
| 2 | A | 语文 | 90 |
| 3 | A | 英语 | 70 |
| 4 | B | 数学 | 60 |
| 5 | B | 语文 | 70 |
| 6 | B | 英语 | 80 |
+----+------+---------+--------+
现在的需求是:获取 数学 / 语文 / 英语 三个科目每个科目最高分的。 通俗点说就是获取每科第一名的。
可以使用 JOIN:SELECT e1.*
FROM `examinationiɡ` e1
JOIN(
SELECT `subject`, MAX(number) max_number
FROM `examinationiɡ`
GROUP BY `subject`
) e2 ON e1.`subject` = e2.`subject` AND e1.number = e2.max_number
返回的结果:+----+------+---------+--------+
| id | name | subject | number |
+----+------+---------+--------+
| 1 | A | 数学 | 100 |
| 2 | A | 语文 | 90 |
| 6 | B | 英语 | 80 |
+----+------+---------+--------+
如果只需要某个科目可以这样:SELECT e1.*
FROM `examinationiɡ` e1
JOIN(
SELECT `subject`, MAX(number) max_number
FROM `examinationiɡ`
GROUP BY `subject`
) e2 ON e1.`subject` = '数学' AND e1.number = e2.max_number
返回的结果:+----+------+---------+--------+
| id | name | subject | number |
+----+------+---------+--------+
| 1 | A | 数学 | 100 |
+----+------+---------+--------+