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

索尼帕塔南提塔

我被一些查询逻辑困住了。我有一张桌子叫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

SQLFiddle 演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章