Есть ли способ избежать записи встроенных представлений в MySQL более одного раза?

Рассмотрим таблицу учеников и таблицу оценок. В таблице оценок есть оценки по всем курсам, которые посещал студент. Я хочу найти студента, который имеет максимальную среднюю оценку.

Я бы использовал CTE для этой проблемы, но, похоже, MySQL не предоставляет CTE. Я хочу написать один запрос, чтобы найти студента с максимальным средним. оценка, также избегая написания запроса, который получает среднее значение. оценки всех студентов, более одного раза.

Запрос, который не работает, выглядит следующим образом (это может дать больше представления о том, чего я хочу достичь):

select temp.st_name 
from (select st1.student_name st_name, AVG(grade) avg_grade from Student st1, Grades grd1 where st1.student_id = grd1 .student_id group by st1.student_id,  st1.sudent_name) temp 
where temp.avg_grade = (select MAX(temp.avg_grade) from temp)

Приведенный выше запрос выдает ошибку: Таблица temp не существует.

Есть ли другой способ найти ученика с максимальной средней оценкой? оценка, избегая писать оператор inline-view дважды?

Спасибо!

2 ответа

Решение

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

Я считаю, что вы можете использовать ORDER BY с LIMIT, но я никогда не писал MYSQL, поэтому я могу ошибаться;)

SELECT
    st1.student_name st_name,
    AVG(grade) avg_grade
FROM Student st1, Grades grd1
WHERE st1.student_id = grd1 .student_id
GROUP BY 
    st1.student_id,
    st1.sudent_name
ORDER BY avg_grade DESC
LIMIT 1;

Примечание: я не изменил ваш начальный оператор, но вы должны использовать синтаксис JOIN поверх FROM tbl1, tbl2

Другие вопросы по тегам