Mysql 如何在联接两个表时选择特定值的计数
这里我连接了两个表,而这段代码无法获得c状态的计数 当c.status='缺席'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
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
+状态
有一行吗?或者每个状态仅一行?