SQL如何统计不同员工数量对应的企业数量分布
二次分组统计SQL实现方案
你已经完成了第一步单企业员工数的统计,只需要将该结果作为数据源二次分组即可实现需求,以下是两种可直接套用的写法:
方案1:子查询嵌套写法(兼容所有主流数据库)
SELECT EIdCount AS `EmployeeId Count`, COUNT(BusinessId) AS `BusinessId Count` FROM ( SELECT BusinessId, COUNT(EmployeeId) AS EIdCount FROM `Table` -- 替换为你的实际表名 GROUP BY BusinessId ) AS business_employee_stat -- 子查询必须指定别名,否则会触发语法报错 GROUP BY EIdCount ORDER BY EIdCount; -- 可选配置,按员工数从小到大排序输出
如果之前你写子查询报错,大概率是内层子查询未指定别名导致,上述代码已补充该配置。
方案2:CTE公共表达式写法(适配MySQL8.0+、PostgreSQL、SQL Server等支持CTE语法的数据库)
可读性更高,适合复杂统计逻辑扩展:
WITH business_employee_count AS ( SELECT BusinessId, COUNT(EmployeeId) AS EIdCount FROM `Table` -- 替换为你的实际表名 GROUP BY BusinessId ) SELECT EIdCount AS `EmployeeId Count`, COUNT(BusinessId) AS `BusinessId Count` FROM business_employee_count GROUP BY EIdCount ORDER BY EIdCount;
补充说明
- 如果需要统计包含
EmployeeId为NULL的关联记录,可以将COUNT(EmployeeId)替换为COUNT(*) - 两种写法最终输出的列名完全匹配你的需求,第一列为员工数,第二列为对应员工数的企业数量
内容的提问来源于stack exchange,提问作者morganherg
相关产品推荐
相关产品推荐

