Кто-нибудь может помочь мне в этом запросе к СУБД?

#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;