有没有可能通过计数(不同)没有加入一个组?

问题描述:

Table 1 : (Company) 

ID Name 
1 A 
2 B 
3 C 

每个公司(pk = ID)都可以有一个或多个员工。有没有可能通过计数(不同)没有加入一个组?

Table 2 : (Employee) (CompanyID referencing ID) 

CompanyID EmpID Name 
1   1  Joe 
1   2  Doe 
1   3  Boe 
2   4  Lou 
3   5  Su 
3   6  Ram 

查询:

select CompanyID, count(*) from Employee group by CompanyID having count(*) > 1; # Lists companies and their counts. 

CompanyID count(*) 
1   3 
3   2 

对于此查询,我只想要一个结果,具有鲜明的CompanyIDs的计数。因此,在这种情况下,'2'[公司A和C]。

总之,我正在寻找拥有2名或更多员工的公司数量。

反正有没有临时表或连接得到结果?我正在使用MySQL。

是:

select count(*) from 
(select CompanyID from Employee group by CompanyID having count(*) > 1) v 

或范围:

select count(*) from 
(select CompanyID from Employee group by CompanyID 
having count(*) >= 5 and count(*) < 10) v 
+0

我正在考虑这个解决办法,但我认为这可能不是最有效的。可能是这样!谢谢... – ThinkCode

+0

我们可以在范围上计数(*)吗?说有5个或更多员工但少于10人的公司数量? – ThinkCode

+1

@ThinkCode:是 - 请参阅编辑答案。 –

是的,这可能与子查询:

SELECT COUNT(*) 
FROM 
    (SELECT 1 
    FROM Employee 
    GROUP BY CompanyID 
    HAVING COUNT(*) > 1 
) AS grp 

或:

SELECT COUNT(DISTINCT CompanyID) 
FROM Employee AS e 
WHERE EXISTS 
     (SELECT * 
     FROM Employee AS e2 
     WHERE e2.CompanyID = e.CompanyId 
      AND e2.EmpID <> e.EmpID 
    ) 

或许如果COUNT(*)很慢,你可以使用MIN()MAX()

SELECT COUNT(*) 
FROM 
    (SELECT 1 
    FROM Employee 
    GROUP BY CompanyID 
    HAVING MAX(EmpID) > MIN(EmpId) 
) AS grp 
+0

错误代码:1248.每个派生表都必须有自己的别名。所以需要一个别名我猜.. – ThinkCode

+0

是的,在子查询中需要别名。 –