mysql - 如何找到从事完全相同项目的 worker 数量

标签 mysql sql database

给定下表,其中两行构成键:

WORKS_ON: ID, ProjectNum

是否可以为每个 ID 输出也在完全相同的项目上工作的其他 worker 的数量(每个 ID 对应一个 worker )?

例如,如果我们有 ID 1 在处理项目 2 和 3,2 在处理 2,3 在处理 2 和 3。我想输出 1,其中 1 作为计数,2 和 0 作为计数,3 和 1作为计数。

我不确定这是否可能,我确实想到了一种天真的方法,即我为每个 ID 选择行数,然后在逐一比较所有 ProjectNumber 之前按 ProjectNumber 排序。但我不确定如何计算满足此要求的员工数量或如何以可接受的方式制定它。

感谢任何指导。

最佳答案

您可以使用 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;

关于mysql - 如何找到从事完全相同项目的 worker 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49949397/

相关文章:

mysql - 在 where 子句上查找空值时查询不起作用

javascript - Ajax PHP 响应登录

php - 在 mysql 和 php 中查找重复的条目,并在下面列出所有条目

sql - ActiveRecord 嵌套 SELECT

java - 如何在查询级别将 DB2 二进制数据转换为 UTF-8

mysql - 使用 Group By 和 Count 优化查询

sql - JOIN (SQL) 的 COALESCE 与 OR 条件

database - 是否有支持计算列的内存数据库?

sql - 描述数据库不相交关系

mysql - SQL 被查询卡住