SQL, выберите максимальное количество в группе - PullRequest
0 голосов
/ 06 мая 2020

У меня есть три таблицы Student, Grd, Course, и я хочу выбрать лучшую оценку для каждого курса и имена студентов.

Вот мой запрос, который возвращает всех студентов - имя и оценка, но я хочу лучшая оценка только для каждого курса.

select 
    student.[name], Course.[Name] as course, max((GRD.Number)) as Grade 
from 
    GRD 
join 
    Course on Course.CO_ID = GRD.CO_ID
join 
    Student on Student.ST_ID = GRD.ST_ID
group by 
    course.[Name], Student.[Name]

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Если вы используете MySQL 8.0, PostgreSQL, SQL Сервер или Oracle, вы можете использовать следующее для решения вашей проблемы.

select
    student_name,
    course,
    Grade
from
(
    select 
        s.[name] as student_name,
        c.[Name] as course,
        max(g.Number) as Grade, 
        row_number() over (partition by c.[Name] order by max(g.Number) desc) as rnk

    from GRD g
    join Course c
    on c.CO_ID = g.CO_ID

    join Student s
    on s.ST_ID = g.ST_ID

    group by 
        c.[Name],
        s.[Name]
) val
where rnk = 1
0 голосов
/ 06 мая 2020

Здесь мы ВЫБИРАЕМ имя студента, название курса и его максимальную оценку.

, где мы объединяем 3 таблицы и ГРУППУ ПО студенту и названию курса, потому что нам нужны все подробности о лучшей оценке каждого курса с именами учащихся.

Я использую ORDER BY в DES C порядок оценок, чтобы найти максимальное значение оценки, и LIMIT 1 для SELECT наивысшей максимальной оценки.

SELECT
    student.name, Course.Name as course, max((GRD.Number)) as Grade 
FROM GRD 
join 
   Course on Course.CO_ID = GRD.CO_ID
join 
   Student on Student.ST_ID = GRD.ST_ID
GROUP BY student.name, Course.Name
ORDER BY Grade DESC LIMIT 1;
...