#sql #join #group-by
Вопрос:
У меня возникли проблемы с использованием GROUP BY и JOIN
У меня есть 2 стола: 1. STUDENTS_TO_COURSE со столбцами course_id и student_id 2. Учащиеся со столбцами id, имя, возраст
Что мне нужно сделать, так это найти курс с самым высоким средним возрастом студентов
Я думал о том, чтобы использовать join для объединения этих таблиц, а затем каким-то образом сгруппировать их
Я также понимаю, что мне нужно использовать среднее значение для подсчета среднего возраста учащихся в объединенной таблице
select STUDENTS_TO_COURSE.course_id as course_id, students.id as student, students.age as age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id
Я думал об этом уже несколько дней, но не мог придумать ни одной идеи
Есть ли какая-нибудь подсказка, как это решить?
Заранее спасибо
Ответ №1:
Попробуй это:
select STUDENTS_TO_COURSE.course_id as course_id, MAX(AVG(age)) as avg_age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id group by course_id,age
Комментарии:
1. Спасибо, ваш ответ действительно помог мне, Хотя ваше решение работало неправильно, мне удалось немного улучшить его и получить правильный ответ. Правильный ответ
select STUDENTS_TO_COURSE.course_id as course_id, AVG(age) as avg_age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id group by course_id order by avg_age desc limit 1
Ответ №2:
select STUDENTS_TO_COURSE.course_id as course_id, avg(age) as age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id group by course_id order by age desc limit 1
Ответ №3:
Если ваш SQL-код верен, ниже приведен список идентификаторов курсов и среднего возраста в порядке убывания среднего возраста. То, что вам нужно, находится в верхней строке списка.
select STUDENTS_TO_COURSE.course_id as course_id, AVG(students.age) as avg_age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id GROUP BY STUDENTS_TO_COURSE.course_id ORDER BY AVG(students.age) DESC