获取最大和为3列的行-Mysql

获取最大和为3列的行-Mysql,mysql,sql,logic,Mysql,Sql,Logic,我被一些查询逻辑卡住了。我有一张名为student的表格。表中有每个学期学生的分数。有n个学期。我需要获得每个学期最高分数(mark1+mark2+mark3)学生的姓名和id 这是我的桌子结构 需要的产出 我尝试获得maxmark 此查询将为您提供所需的结果。它将学生表连接到一个表中,该表中填写了每个学期的最高分数,仅显示该学期取得最高分数的学生(s2.maxmark=s1.mark1+s1.mark2+s1.mark3) 输出: id name mark1 mark2 mar

我被一些查询逻辑卡住了。我有一张名为
student
的表格。表中有每个学期学生的分数。有
n
个学期。我需要获得每个学期最高分数(mark1+mark2+mark3)学生的姓名和id

这是我的桌子结构

需要的产出

我尝试获得maxmark


此查询将为您提供所需的结果。它将学生表连接到一个表中,该表中填写了每个学期的最高分数,仅显示该学期取得最高分数的学生(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

此查询将为您提供所需的结果。它将学生表连接到一个表中,该表中填写了每个学期的最高分数,仅显示该学期取得最高分数的学生(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

您必须按sem分组,以获得子查询中每个sem的最大标记,一旦获得每个sem的最大标记,您就可以在这样的子查询中使用in

SELECT *, mark1+mark2+mark3 AS maxmark 
from student
where (sem, mark1 + mark2 + mark3) in (
SELECT sem, MAX(mark1 + mark2 + mark3) AS maxmark
FROM student
GROUP BY sem ) 
输出

|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   |
你可以从互联网上了解更多关于,
祝你好运,希望这有帮助

您必须按sem分组,以获得子查询中每个sem的最大标记,一旦获得每个sem的最大标记,您就可以在这样的子查询中使用in

SELECT *, mark1+mark2+mark3 AS maxmark 
from student
where (sem, mark1 + mark2 + mark3) in (
SELECT sem, MAX(mark1 + mark2 + mark3) AS maxmark
FROM student
GROUP BY sem ) 
输出

|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   |
你可以从互联网上了解更多关于,
祝你好运,希望这有帮助

你有没有试图解决这个问题?如果您能与我们分享,那将非常有帮助。@GiorgosBetsos我只得到了获取马克斯的查询。我已经更新了答案Good try@SonyPathanamthitta只需要将组更改为sem即可开始…这种问题可能是设计不佳的症状。如果有第四个标记呢?或者,如果你想给每个学生取3分中最好的2分怎么办?你不必担心第4分。找到解决办法了。你有没有尝试过解决这个问题?如果您能与我们分享,那将非常有帮助。@GiorgosBetsos我只得到了获取马克斯的查询。我已经更新了答案Good try@SonyPathanamthitta只需要将组更改为sem即可开始…这种问题可能是设计不佳的症状。如果有第四个标记呢?或者,如果你想给每个学生取3分中最好的2分怎么办?你不必担心第4分。找到解决办法了。
|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   |