Member 13288167 Ответов: 1

Как рассчитать студента 1-го ранга с его суммарными валовыми оценками, предмет и оценки которого имеют максимальный балл


МЕТКИ SNAME ТЕМУ
СУРЕШ 98 АНГЛИЙСКИЙ
СУРЕШ 97 СПИЧЕК
СУРЕШ 96 НАУКА
СУНИЛ 95 АНГЛИЙСКИЙ
СУНИЛ 94 МАТЕМАТИКА
СУНИЛ 99 НАУКА
РАМЕШ 91 АНГЛИЙСКИЙ
РАМЕШ 92 МАТЕМАТИКА
РАМЕШ 98 НАУКА

Что я уже пробовал:

как рассчитать студента 1-го ранга с его суммарными валовыми оценками, предмет и оценки которого имеют максимальный балл.

1 Ответов

Рейтинг:
1

OriginalGriff

Делайте это поэтапно: сначала получите общий балл студентов и самый высокий личный балл, а затем получите самого высокого бомбардира:

SELECT TOP 1 SNAME, SUM(Marks) As Total, MAX(Marks) As Highest
FROM MyTable
GROUP BY SName
ORDER By Total DESC
Это возвращает одного студента:
SName  Total   Highest
SURESH	 291        98
Затем соедините это с исходной таблицей, чтобы также получить предмет:
SELECT s.SName, s.Total, a.Subject, s.Highest
FROM MyTable a
JOIN (SELECT TOP 1 SNAME, SUM(Marks) As Total, MAX(Marks) As Highest
        FROM MyTable
        GROUP BY SName
        ORDER By Total DESC) s 
ON s.SName = a.SName AND s.Highest = a.Marks
Результат: одна строка, информация, которая вам нужна.
SName     Total   Subject  Highest
SURESH	    291   English       98

Но...это очень плохой дизайн базы данных. Вы постоянно храните одну и ту же информацию и должны использовать три таблицы: одну для студентов, одну для предметов и одну для результатов, которая использует внешние ключи обратно к другим.


Maciej Los

Как насчет функций ранжирования, таких как РАНГ? Может быть больше одного человека, который достиг 1-го места.