我被一些查询逻辑困住了。我有一张桌子叫student
. 表上有每学期学生的分数。有n
学期数。我需要获取每个学期最高分(mark1+mark2+mark3)的学生的姓名和id 。
这是我的表结构
|id| name | mark1| mark2| mark3| sem|
|1 | Harry| 8 | 9 | 9 | 1 |
|2 | John | 10 | 8 | 10 | 1 |
|3 | Derek| 4 | 5 | 8 | 1 |
|4 | Dona | 8 | 9 | 5 | 1 |
|5 | Ammy | 9 | 9 | 9 | 2 |
|6 | Kate | 10 | 7 | 10 | 2 |
|7 | Aby | 3 | 5 | 4 | 2 |
|8 | Eliza| 5 | 9 | 5 | 2 |
需要的输出
|id| name | mark1| mark2| mark3| sem| maxmark|
|2 | John | 10 | 8 | 10 | 1 | 28 |
|5 | Ammy | 9 | 9 | 9 | 2 | 27 |
|6 | Kate | 10 | 7 | 10 | 2 | 27 |
我试图获得maxmark
SELECT *, (MAX(`mark1` + `mark2` + `mark3`)) AS maxmark
FROM `stud`
GROUP BY `studid`
此查询将为您提供所需的结果。它将学生表连接到一个填满每学期最高分的表,只显示在该学期取得最高分的学生 (s2.maxmark = s1.mark1+s1.mark2+s1.mark3)。
SELECT s1.*, s2.maxmark
FROM student s1
JOIN (SELECT sem, MAX(mark1 + mark2 + mark3) AS maxmark
FROM student
GROUP BY sem) s2
ON s2.sem = s1.sem AND s2.maxmark = s1.mark1+s1.mark2+s1.mark3
输出:
id name mark1 mark2 mark3 sem maxmark
2 John 10 8 10 1 28
5 Ammy 9 9 9 2 27
6 Kate 10 7 10 2 27
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句