Я пытаюсь перечислить имена и фамилии сотрудников, работающих над проектами с наибольшим количеством уникальных местоположений проекта.
Select distinct Fname
, Lname
from employee a
join project b
join works_on c
where a.Ssn = c.Essn
and b.Pnumber = c.Pno
group by Fname
, Lname
order by Fname desc
, Lname desc
, COUNT(Plocation) desc;
и он возвращает:
Fname | Lname
-----------------
Ramesh Narayan
Joyce English
John Smith
Jennifer Wallace
James Borg
Franklin Wong
Alicia Zelaya
Ahmad Jabbar
но я хочу исключить Джона Смита и Джойса Инглиша, поскольку они не являются исключением из проектов с самыми уникальными локациями. Все остальное должно быть там. Я пытался использовать having max(count), но это не сработало.
Обновлено: извините, я очень новичок в sql и stackoverflow. Я извиняюсь, если это слишком много или слишком мало для добавления, но вот рабочий пример таблиц, которые я использую, и их входные данные:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=431df290c2042d46ba44a20c34a0c7b1
Это имена и фамилии, которые я должен получить, потому что они не относятся к проектам, которые находятся в местах: Stafford и Houston, которые чаще всего встречаются в проектах из 2.
См. meta.stackoverflow.com/questions/333952/…
Извините за это, я отредактировал сообщение, добавив свои операторы CREATE и INSERT. Надеюсь, что это поможет и спасибо за отзыв.
Основываясь на запросе, откуда вы знаете, что Joyce English и John Smith следует исключить? Если вам нужно использовать скрипку, которую я отредактировал в вашем вопросе; отредактируйте запросы и т. д., нажмите «Выполнить», и он создаст новую ссылку на скрипку. При необходимости скопируйте новую обновленную ссылку в свой вопрос.
Согласно вашей модели данных, у проекта есть только одно местоположение. Я не понимаю вопроса.






Вы можете использовать аналитическую функцию RANK, создать подзапрос и присоединиться к существующему запросу следующим образом:
Select distinct Fname , Lname
from employee e
join works_on w on e.ssn = w.essn
join project p on p.Pnumber = w.Pno
join (select plocation, rank() over (order by count(1) desc) as rn
from project
group by plocation) max_location
on max_location.plocation = p.plocation and max_location.rn = 1
Примечание. Всегда используйте стандартные соединения ANSI.
Пожалуйста, предоставьте образцы данных и желаемые результаты. Совершенно неясно, как узнать, в каких проектах больше всего локаций. Также научитесь использовать правильный, явный, стандартный, удобочитаемый синтаксис
JOIN.