Получить строки с максимальной суммой 3 столбца - Mysql - PullRequest
0 голосов
/ 15 сентября 2018

Я застрял с некоторой логикой запроса. У меня есть таблица под названием student. В таблице есть оценки студентов каждого семестра. Существует n количество семестров. Мне нужно получить имя и идентификатор студентов с наивысшей максимальной оценкой (mark1 + mark2 + mark3) в каждом семестре.

Это моя структура таблицы

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

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Вы должны сгруппировать по 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 ) 

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   |

вы можете узнать больше об этом из Интернета, https://www.techonthenet.com/mysql/in.php удачи, надеюсь, это помогло.

0 голосов
/ 15 сентября 2018

Этот запрос даст вам результаты, которые вы хотите.Он присоединяет таблицу учеников к таблице, заполненной максимальными оценками за каждый семестр, показывая только тех учеников, которые набрали максимальную оценку за этот семестр (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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...