отображать название, название отдела, оценки лучших исполнителей в Software Engineering, упорядоченные по названию отдела в порядке возрастания - PullRequest
0 голосов
/ 31 мая 2019

Напишите запрос, чтобы отобразить имя, название отдела и оценки лучших исполнителей в Software Engineering, упорядоченные по названию отдела в порядке возрастания.

Я использовал приведенный ниже запрос, но не получилжелаемый результат показывает мне двух студентов из разных отделов с одинаковыми оценками в области разработки программного обеспечения

select distinct a.student_name,b.department_name,c.value from student a
inner join department b on a.department_id=b.department_id
inner join mark c on c.student_id=a.student_id and c.value in
(select max(a.value) from mark a,subject d where a.subject_id=d.subject_id
and d.subject_name='Software Engineering')
order by b.department_name;

пожалуйста, обратитесь к схеме

Ответы [ 2 ]

0 голосов
/ 20 июля 2019

Объяснение вашей проблемы и код:

1 . Используя подзапрос, вы извлекаете только максимальное число и проверяете, присутствует ли оно, но значение (отметка субъекта) может присутствовать для других субъектов, поэтому у вас два вывода вместо одного .

2 . Вы не присоединились к предметной таблице и не проверили, является ли предмет разработкой программного обеспечения.

Решение проблемы:

select student_name,department_name,value 
from student 
inner join department using(department_id)
inner join mark using(student_id)
inner join subject using(subject_id)
where value = (select max(value) from mark join subject using(subject_id) where lower(subject_name)='software engineering')
and lower(subject_name)='software engineering'
order by department_name;
0 голосов
/ 31 мая 2019

Эта часть требует модификации:

 and c.value in (
   select max(a.value) 
     from mark a, subject d 
     where a.subject_id = d.subject_id and d.subject_name='Software Engineering')

Вам нужно взять только Инженер-программист строк из таблицы mark, поэтому, пожалуйста, напишите:

 and (c.subject_id, c.value) 
     in (select subject_id, max(a.value) 
           from mark a
           join subject d using (subject_id)
           where d.subject_name = 'Software Engineering'
           group by subject_id)

демо

Вы можете сделать это также с помощью аналькальных функций (row_number, max), но я хотел остаться рядом с вашим решением, котороеты знаешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...