#join #subquery #rdbms
#Присоединиться #подзапрос #rdbms
Вопрос:
Напишите запрос для отображения имен учащихся, набравших максимальное количество баллов по каждому предмету, упорядоченных по названию предмета в порядке возрастания. Если есть несколько вершин, отобразите их имена в алфавитном порядке. Отобразите его как subject_name и student_name. O / P: первый столбец — subject_name второй столбец — student_name
Мой ответ-
select su.subject_name,st.student_name from subject su,student st,mark m
where m.student_id = st.student_id and m.subject_id = su.subject_id
and m.value = (select max(value) from mark group by subject_id);
Ошибка-
and m.value = (select max(value) from mark group by subject_id)
*
ERROR at line 3:
ORA-01427: single-row subquery returns more than one row
Что я знаю, так это то, что мне придется создать другой подзапрос, что-то вроде
and m.value =(select..... (select max(value) from mark group by subject_id));
Но я не понимаю.
Ответ №1:
Неважно, получил ответ, нам придется использовать В operator и club значение subject_id, поскольку они являются набором.
SELECT su.subject_name, st.student_name
FROM student s
JOIN mark m ON st.student_id = m.student_id
JOIN subject su ON m.subject_id = su.subject_id
WHERE (m.value, su.subject_id) IN (
SELECT max(value), subject_id FROM mark GROUP BY subject_id
)
ORDER BY su.subject_name, st.student_name;