Как узнать количество рабочих, работающих над одними и теми же проектами

Учитывая следующую таблицу, где обе строки составляют ключ:

WORKS_ON: ID, ProjectNum

Можно ли вывести для каждого идентификатора количество других работников (каждый идентификатор соответствует работнику), которые также работают над одними и теми же проектами?

Например, если у нас есть ID 1, работающий над проектами 2 и 3, 2, работающий над 2 и 3, работающий над 2 и 3. Я хочу вывести 1 с 1 в качестве счетчика, 2 с 0 в качестве счетчика и 3 с 1 в качестве счетчика. .

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

Любое руководство приветствуется.

Отметьте свой вопрос с помощью базы данных, которую вы используете.

Gordon Linoff 20.04.2018 22:40
Освоение архитектуры микросервисов с 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
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете выразить это довольно запутанно, используя механизмы набора в SQL. Или вы можете сделать это проще, используя агрегирование строк. Итак, в MySQL это будет выглядеть так:

select i.id, count(i2.id) as cnt
from (select id, group_concat(projectnum order projectnum) as projects
      from works_on
      group by id
     ) i left join
     (select id, group_concat(projectnum order projectnum) as projects
      from works_on
      group by id
     ) i2
     on i2.projects = i.projects and i2.id <> i.id
group by i.id
order by i.id;

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