MySQL技术求助:获取工程员工占比最高的deptID
解决MySQL中找出工程员工占比最高部门ID的问题
嘿,作为MySQL新手碰到这种统计类需求很正常,我来帮你搞定这个问题!你的目标是找出工程员工占比最高的deptID,已知deptID 12因为仅1名员工且为工程师(占比100%),所以它是正确结果。
核心思路
我们需要先计算每个部门的:
- 总员工数
- 工程师员工数
- 工程师占比(工程师数/总员工数)
然后筛选出占比最高的部门ID。
方案1:使用窗口函数(MySQL 8.0及以上版本推荐)
窗口函数可以让我们更简洁地给每个部门的占比排名,直接取排名第一的部门:
SELECT deptID FROM ( SELECT deptID, -- 按工程师占比降序排名,占比相同的部门会并列第一 RANK() OVER (ORDER BY SUM(CASE WHEN job_title = '工程师' THEN 1 ELSE 0 END) / COUNT(*) DESC) AS rank_num FROM your_table_name -- 替换成你的实际表名 GROUP BY deptID ) AS ranked_departments WHERE rank_num = 1;
方案2:兼容MySQL 5.x版本(无窗口函数)
如果你的MySQL版本不支持窗口函数,用嵌套子查询也能实现:
SELECT deptID FROM ( SELECT deptID, SUM(CASE WHEN job_title = '工程师' THEN 1 ELSE 0 END) / COUNT(*) AS engineer_ratio FROM your_table_name -- 替换成你的实际表名 GROUP BY deptID ) AS dept_ratios WHERE engineer_ratio = ( -- 先算出所有部门中的最高占比 SELECT MAX(engineer_ratio) FROM ( SELECT SUM(CASE WHEN job_title = '工程师' THEN 1 ELSE 0 END) / COUNT(*) AS engineer_ratio FROM your_table_name GROUP BY deptID ) AS all_ratios );
关键注意点
- 把
your_table_name替换成你实际的数据表名称 - 如果你的职位字段不是
job_title,或者工程师的职位值不是'工程师',要对应修改成你表中的实际字段和值 - 这两个方案都能正确返回deptID 12,因为它的工程师占比是100%,是所有部门中最高的;如果有多个部门占比同为最高,也会全部返回
内容的提问来源于stack exchange,提问作者M.S
相关产品推荐
相关产品推荐

