我被一些查询逻辑困住了。我有一张table叫 student
. 表中有学生每学期的分数。有 n
学期数。我需要得到每个学期最高分(mark1+mark2+mark3)学生的姓名和id。
这是我的table结构
|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 |
我想得到马克斯
SELECT *, (MAX(`mark1` + `mark2` + `mark3`)) AS maxmark
FROM `stud`
GROUP BY `studid`
2条答案
按热度按时间iqxoj9l91#
您必须按sem分组,以获得子查询中每个sem的最大标记,一旦获得每个sem的最大标记,就可以在这样的子查询中使用in,
输出
你可以从网上了解更多关于,https://www.techonthenet.com/mysql/in.php 祝你好运,希望这有帮助。
mrzz3bfm2#
此查询将提供所需的结果。它将student表连接到一个每个学期都有最高分数的表中,只显示该学期达到最高分数的学生(s2.maxmark=s1.mark1+s1.mark2+s1.mark3)。
输出:
sqlfiddle演示