используя функции Max и Avg вместе в SQL - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующие четыре таблицы, содержащие информацию о студентах, информацию о лекциях, информацию о посещаемых лекциях и экзамены.

с использованием SELECT Student_id, AVG (оценки) в качестве среднего значения ОТ экзаменов GROUP BY Student_id;Я получаю список средних оценок, полученных каждым студентом.

Как мне объединить его с функцией MAX для получения идентификатора, имени и среднего числа студентов, у которых самый высокий средний показатель в списке?

студентов

идентификатор студента
имя студента

лекции

идентификатор лекции
имя лекции
ECTS

посещающие лекции

id
student_id
lecture_id

экзамены

id
Student_id
Lecture_id
Оценки

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете использовать такой SQL с предложением ORDER BY ... DESC, чтобы получить MAX

Для MySQL:

SELECT e.Student_id, s.student_name, AVG(marks) as "average" 
  FROM exams e
  LEFT JOIN students s ON e.Student_id = s.Student_id
 GROUP BY e.Student_id, s.student_name
 ORDER BY "average" DESC
 LIMIT 1;

Для Oracle:

SELECT * FROM
(
 SELECT q.*, row_number() over (order by "average" desc) as rn 
   FROM
  (
   SELECT e.Student_id, s.student_name, AVG(marks) as "average"           
     FROM exams e
     LEFT JOIN students s ON e.Student_id = s.Student_id
    GROUP BY e.Student_id, s.student_name
   ) q
 )
 WHERE rn = 1;
...