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

SQL查询异常排查:统计符合条件的部门员工数问题

问题分析与修正方案

你的SQL语句目前存在两个关键问题,导致输出不符合预期:

  • 子查询未关联部门:你写的子查询没有和外部查询的部门做关联,所以它计算的是全公司1967年以前出生的员工总数,而不是当前部门的对应人数。
  • 拼写错误:empleyee_id应该是employee_id,这个拼写错误可能导致查询报错或者统计结果异常。

下面是修正后的两种可行方案:

方案一:关联子查询

SELECT 
    d.department_id,
    d.department_name,
    (SELECT COUNT(e.employee_id) 
     FROM employee e 
     WHERE e.department = d.department_id 
       AND YEAR(e.dateofbirth) < 1967) AS numberofemployeesbefore1967
FROM department d
INNER JOIN employee e ON d.department_id = e.department
GROUP BY d.department_id, d.department_name
HAVING COUNT(e.employee_id) >= 3

这里的子查询通过e.department = d.department_id关联了外部的部门表,确保统计的是当前部门内符合出生年份条件的员工数。同时我们调整了表的别名,让逻辑更清晰,也修正了拼写错误。

方案二:先分组统计再关联

这种写法可读性更强,适合逻辑复杂的场景:

WITH dept_employee_stats AS (
    SELECT 
        department,
        COUNT(*) AS total_employees,
        SUM(CASE WHEN YEAR(dateofbirth) < 1967 THEN 1 ELSE 0 END) AS numberofemployeesbefore1967
    FROM employee
    GROUP BY department
)
SELECT 
    d.department_id,
    d.department_name,
    s.numberofemployeesbefore1967
FROM department d
INNER JOIN dept_employee_stats s ON d.department_id = s.department
WHERE s.total_employees >= 3

我们先在CTE(公共表表达式)里统计每个部门的总员工数和1967年前出生的员工数,再和部门表关联筛选出总员工数≥3的部门,这样逻辑更直观,也避免了子查询的嵌套。

内容的提问来源于stack exchange,提问作者user7856839

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:59