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

标签 mysql sql logic

我被一些查询逻辑困住了。我有一个名为 student 的表。表中有每个学期学生的成绩。有 n 个学期。我需要获取每个学期最高分(mark1+mark2+mark3)的学生的姓名和ID。

This is my table structure

|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  |

Needed output

|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   |

MY ATTEMPT TO GET 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 Demo

关于mysql - 获取最大总和为 3 列的行 - Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341973/

相关文章:

mysql - 使用 `LIKE` 进行查询的操作数计数错误

c# - 条件为假时执行的 If 语句 True block

用于选择 A ='foo' 和 (A ='bar' 和 B ='baz') 位置的 SQL 查询

sql - 如何按指定周末结束的一周分组?

php - 使用 PHP 进行 MySQL 查询

MySQL LEFT JOIN 一致地从多个表返回数据

sql - Postgres : How to set column default value as another column value while altering the table

php - 使用for循环将记录添加到数据库

sql - 添加列时,我必须创建和删除而不是更改?

logic - 什么是学术界以外的自然扣除?