You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询无女性员工的部门及其男性员工数量(附表结构与伪SQL)

没问题,我来帮你把这个查询逻辑落地成可用的SQL!你的思路完全正确——先按部门统计男女员工数量,再筛选出没有女性员工的部门,最后返回这些部门的男性员工数。下面是具体实现和细节说明:

完整SQL实现
SELECT dept_stats.males, dept_stats.DEPT_ID AS dno
FROM (
    SELECT 
        SUM(CASE WHEN Gender = 'male' THEN 1 ELSE 0 END) AS males,
        SUM(CASE WHEN Gender = 'female' THEN 1 ELSE 0 END) AS females,
        DEPT_ID
    FROM EMPLOYEE
    GROUP BY DEPT_ID
) AS dept_stats
WHERE dept_stats.females = 0;

关键细节解释

  • 准确统计员工性别数量:用SUM(CASE...)是SQL标准写法,比直接用COUNT(Gender='male')兼容性更好——毕竟不同数据库对布尔值的处理有差异(比如MySQL会把Gender='male'的结果转成1/0,而Oracle会返回布尔类型),CASE表达式能确保在所有SQL方言里都正确统计符合条件的员工数。
  • 筛选无女性的部门:子查询先算出每个部门的男女员工数,外层查询通过WHERE females = 0过滤掉有女性员工的部门,只保留目标部门。
  • 别名匹配需求:把DEPT_ID别名成dno,和你伪SQL里的字段名要求一致,子查询别名dept_stats也让外层引用更清晰。

简化版(适用于MySQL等支持COUNT(IF)的数据库)

如果你的数据库支持COUNT(IF(...))语法,可以省略子查询,用HAVING直接过滤,逻辑更紧凑:

SELECT 
    COUNT(IF(Gender = 'male', 1, NULL)) AS males,
    DEPT_ID AS dno
FROM EMPLOYEE
GROUP BY DEPT_ID
HAVING COUNT(IF(Gender = 'female', 1, NULL)) = 0;

内容的提问来源于stack exchange,提问作者H. Wilde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:32:20