2013-09-21 1 views
1

Рассмотрим таблицу Student и таблицу Grades. Таблица классов имеет оценки для всех курсов, которые взял студент. Я хочу найти студента, который имеет максимальную среднюю оценку.Есть ли способ избежать написания встроенных просмотров более одного раза в MySQL

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

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

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) 

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

Есть ли другой способ найти ученика с максимальным средним значением. чтобы избежать двукратного написания заявления в виде строки.

Спасибо!

ответ

0

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

+0

Я надеялся, что у меня не будет слышать это :( Спасибо за ответ !! –

1

Я считаю, что вы можете использовать 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 синтаксис над ОТ tbl1, tbl2

+0

на самом деле это вероятно, будет работать. не читал эту проблему достаточно осторожно и только сфокусированный на части «can you CTE in MySQL». Хорошее решение. –

+0

Спасибо f или ответ, но я не думаю, что это сработает, если есть более одного ученика с максимальным средним классом. –

+0

@NitinYadav, ну в этом случае у вас нет другого выбора, кроме выполнения запроса запроса. – plalx

 Смежные вопросы

  • Нет связанных вопросов^_^