带附加条件的左连接的mysql计数

带附加条件的左连接的mysql计数,mysql,Mysql,我必须生成50名员工的任务报告。所以 让我们考虑以下列的两个表 员工:id|姓名 员工任务:id |员工id |任务描述|状态|日期 有两种类型的状态[1=未完成,2=已完成] 员工可能有任务,也可能没有任务 因此,对于给定的日期,我想列出所有50名员工及其任务,如下所示 -------------------------------------- id | employee | completed | incomplete -----------------------------------

我必须生成50名员工的任务报告。所以 让我们考虑以下列

的两个表 员工:
id|姓名

员工任务:
id |员工id |任务描述|状态|日期

有两种类型的状态
[1=未完成,2=已完成]

员工可能有任务,也可能没有任务

因此,对于给定的日期,我想列出所有50名员工及其任务,如下所示

--------------------------------------
id | employee | completed | incomplete
--------------------------------------
1  | Mr. X    | 4         | 3    
2  | Mr. Y    | 0         | 0
因此,我将查询写为

select e.id, e.name as employee,
       sum(case when status=2 then 1 else 0 end) as completed,
       sum(case when status=1 then 1 else 0 end) as incomplete
from employees e
         left join employee_tasks et on et.employee_id=e.id
where (et.date=GIVEN_DATE or et.date is null)
group by e.id
在结果集中,我看到了员工数量的变化。它应该一直是50。但对于不同的日期,结果集有时包含42或47名员工。我似乎不明白为什么


(已使用(et.date为空),因为员工在给定日期可能没有任何任务)

由于一些员工在结果中被过滤掉,因此可能怀疑
where
子句。可能有效的方法是将筛选移动到
连接

选择e.id,e.name作为员工,
完成时的总和(状态为2时为1,否则为0结束),
总和(状态为1时为1,否则为0结束)不完整
来自雇员
left join employee_tasks et on et.employee_id=e.id和et.date=给定日期
按e.id分组

请发布样本数据、当前结果和期望结果。