Mysql 是否可以在没有联接的情况下按计数(不同)分组?
每个公司pk=ID可以有一个或多个员工Mysql 是否可以在没有联接的情况下按计数(不同)分组?,mysql,join,group-by,distinct,Mysql,Join,Group By,Distinct,每个公司pk=ID可以有一个或多个员工 Table 1 : (Company) ID Name 1 A 2 B 3 C 查询: 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
Table 1 : (Company)
ID Name
1 A
2 B
3 C
查询:
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
对于这个查询,我只需要一个具有不同companyId计数的结果。因此,在这种情况下,'2'[公司A和C]
简而言之,我要找的是有2名或更多员工的公司数量
Table 1 : (Company)
ID Name
1 A
2 B
3 C
在没有临时表或联接的情况下,是否仍然可以获得结果?我正在使用MySQL。是:
select CompanyID, count(*) from Employee group by CompanyID having count(*) > 1; # Lists companies and their counts.
CompanyID count(*)
1 3
3 2
或适用于以下范围:
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
或:
我在考虑这个解决方案,但我认为这可能不是最有效的。也许是吧!谢谢…我们能指望*范围吗?比如说,拥有5名或更多员工但少于10名员工的公司数量?对不起,我知道了:计数>=5或计数<10错误代码:1248。每个派生表都必须有自己的别名。所以我想需要一个别名。是的,子查询中需要别名。
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
)
SELECT COUNT(*)
FROM
( SELECT 1
FROM Employee
GROUP BY CompanyID
HAVING MAX(EmpID) > MIN(EmpId)
) AS grp