Чем плох такой запрос? Не обращая внимания на то, что нет вложенного подзапроса. (Нормально ли группировать одновременно s.group_id, s.name ?) SELECT s.group_id, s.name, AVG(e.grade) as average_grade FROM students s INNER JOIN enrollments e ON s.id = e.student_id GROUP BY s.group_id, s.name HAVING AVG(e.grade) > 80;