Отображение имени сотрудника, имени субъекта и максимальных оценок, набранных в таблице - PullRequest
1 голос
/ 02 февраля 2020

Это вопрос о том, какой код должен быть в oracle. Напишите запрос, чтобы отобразить список имен сотрудников, обработанных имен субъектов, максимальную оценку, набранную по этой теме. Дайте псевдоним максимальной отметке как max_mark. Сортировать результат по максимальной отметке по убыванию. Это схема для таблиц

Я пытался использовать объединение для решения этой проблемы с помощью этого кода .... но результаты, которые я получаю, странные ... пожалуйста, помогите как получить правильный результат.

select staff_name,subject_name,value as max_mark
from subject
join staff using(staff_id)
join mark using(subject_id)
where(staff_id,value)
in(select staff_id,max(value)
from subject group by staff_id)
order by max_mark desc;  

вывод, который я получаю:

output-part1 output-part2

ожидаемый вывод ожидаемый выходной-фото

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Вам просто нужно максимальное количество баллов, которое студент получает по предмету, который обрабатывается персоналом. Используйте max агрегатную функцию следующим образом:

Select st.staff_name, s.subject_name, max(m.value) as max_marks
  From staff st 
  join subject s
    On st.staff_id = s.staff_id
  Join marks m 
    on m.subject_id = s.subject_id
 Group by st.staff_name, s.subject_name, st.staff_id

Cheers !!

0 голосов
/ 02 февраля 2020

Вам лучше использовать функцию MAX(..) OVER (PARTITION BY...) analyti c:

SELECT staff_name,subject_name,
       MAX(m.value) OVER (PARTITION BY sb.staff_id) AS max_mark
  FROM subject sb
  JOIN staff st ON st.staff_id = sb.staff_id
  JOIN mark m   ON m.subject_id = sb.subject_id
 ORDER BY max_mark DESC

В этом случае GROUP BY не требуется * Вместо этого можно использовать предложение 1006 *.

...