Попытка выбрать максимальное количество уникальных вхождений

Я пытаюсь перечислить имена и фамилии сотрудников, работающих над проектами с наибольшим количеством уникальных местоположений проекта.

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.

Пожалуйста, предоставьте образцы данных и желаемые результаты. Совершенно неясно, как узнать, в каких проектах больше всего локаций. Также научитесь использовать правильный, явный, стандартный, удобочитаемый синтаксис JOIN.

Gordon Linoff 15.12.2020 01:11

См. meta.stackoverflow.com/questions/333952/…

Strawberry 15.12.2020 02:09

Извините за это, я отредактировал сообщение, добавив свои операторы CREATE и INSERT. Надеюсь, что это поможет и спасибо за отзыв.

Nate Platt 15.12.2020 02:30

Основываясь на запросе, откуда вы знаете, что Joyce English и John Smith следует исключить? Если вам нужно использовать скрипку, которую я отредактировал в вашем вопросе; отредактируйте запросы и т. д., нажмите «Выполнить», и он создаст новую ссылку на скрипку. При необходимости скопируйте новую обновленную ссылку в свой вопрос.

FanoFN 15.12.2020 02:49

Согласно вашей модели данных, у проекта есть только одно местоположение. Я не понимаю вопроса.

Gordon Linoff 15.12.2020 19:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
5
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать аналитическую функцию 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

db<>fiddle

Примечание. Всегда используйте стандартные соединения ANSI.

Другие вопросы по теме