Есть ли способ избежать записи встроенных представлений в 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