SQL查询department表仅返回非空记录及筛选员工数超38部门问题
SQL查询问题修复方案
原代码存在的问题
- 外层查询未过滤
department为NULL的记录,会直接返回空部门行 - 子查询中的
department is not null仅限制了子查询统计范围,无法排除外层的空部门记录 - 不满足员工数>38的部门对应子查询会返回NULL,最终结果会出现大量无效的部门+NULL的行
推荐最优实现
优先使用GROUP BY分组聚合实现,逻辑更清晰、执行效率更高:
SELECT department, COUNT(employee_id) AS employee_count FROM employees WHERE department IS NOT NULL GROUP BY department HAVING COUNT(employee_id) > 38;
实现逻辑说明
WHERE department IS NOT NULL先提前过滤所有空部门的记录,避免无效统计- 按
department字段分组,用COUNT(employee_id)统计每个部门的在职员工数 HAVING子句对聚合后的结果过滤,仅保留员工数超过38人的部门记录,无需额外加DISTINCT去重
原写法兼容修改
如果需要保留原有关联子查询的写法,可按以下方式调整:
SELECT DISTINCT department, ( SELECT COUNT(employee_id) FROM employees AS e1 WHERE e2.department = e1.department ) AS employee_count FROM employees AS e2 WHERE e2.department IS NOT NULL HAVING employee_count > 38;
内容的提问来源于stack exchange,提问作者Kiran Sonkamble
相关产品推荐
相关产品推荐

