Mysql 如何在联接两个表时选择特定值的计数

Mysql 如何在联接两个表时选择特定值的计数,mysql,Mysql,这里我连接了两个表,而这段代码无法获得c状态的计数 当c.status='缺席' SELECT d.empReferenceID, Count(c.status) FROM emp_tbl d LEFT JOIN empattendance c on d.empReferenceID = c.RefrenceID and c.status='PRESENT' and month(c.CreatedOn)=5

这里我连接了两个表,而这段代码无法获得c状态的计数 当c.status='缺席'

SELECT    d.empReferenceID,
          Count(c.status) 
FROM      emp_tbl d  
LEFT JOIN empattendance c 
on        d.empReferenceID = c.RefrenceID 
and       c.status='PRESENT' 
and       month(c.CreatedOn)=5 
and       year(c.CreatedOn)=2017 
where     c.RefrenceID not in ('2075671') 
GROUP BY  d.empReferenceID;

不要在WHERE子句中对外部联接表设置条件。您的
其中c.referenceid不在('2075671')
将取消所有外部联接记录,并将联接转换为内部联接

可能您正在寻找条件聚合,在条件聚合中计算不同的状态并在同一结果行中显示计数:

SELECT    d.empReferenceID,
          Count(c.status) AS count_all,
          Sum(c.status = 'PRESENT') AS count_present,
          Sum(c.status = 'Absent') AS count_absent
FROM      emp_tbl d  
LEFT JOIN empattendance c 
ON        d.empReferenceID = c.RefrenceID 
AND       month(c.CreatedOn)=5 
AND       year(c.CreatedOn)=2017 
WHERE     d.empReferenceID not in ('2075671') 
GROUP BY  d.empReferenceID;

顺便说一下,
SUM
行使用了MySQL的
true=1
/
false=0
。使用标准SQL也可以实现同样的效果:
Sum(当c.status='PRESENT'时为1,否则为0)
Count(当c.status='PRESENT'时为1,则为1)

您的查询选择
c.status='PRESENT'
,您希望它计数
c.status='缺席'
?这怎么可能?你想在每组中分别检索
PRESENT
缺席
计数吗?@Thorsten Kettner是的,我知道我需要在加入时删除c.status='PRESENT'此条件,但我不知道如何获得缺席计数的c.status@Forward计数(c.status)应该是零冷,请出示一些样本数据和预期结果?使用
groupbyd.empReferenceID
时,每个
empReferenceID
都会得到一个结果行。这是需要的吗?或者您希望每个
empReferenceID
+
状态
有一行吗?或者每个
状态仅一行?