[英]How to join two SELECT statements?
我想加入以下两个查询。 但是第二个查询的条件不应该影响第一个查询的结果。我该怎么做?
查询1
SELECT ed.name, COUNT(ej.designation) AS actual
FROM emp_designations ed
JOIN emp_job_details ej on ed.id = ej.designation
WHERE ed.department = 4
GROUP BY ej.designation,ed.name
查询2
SELECT ej.designation, COUNT(*) as present
FROM daily_attendances da
JOIN emp_job_details ej ON da.emp_id = ej.emp_id
WHERE da.in_time != '' AND da.date = '2017-06-02'
GROUP BY ej.designation
在查询2的“指定”列中,12、13、14等于“切割负责人”,“图案制作者”,“主管”。
我想加入这两个表
你可以试试
SELECT ej.designation, ed.name, COUNT(ej.designation) AS actual, COUNT(da.emp_id) as present
FROM emp_designations ed
JOIN emp_job_details ej on ed.id = ej.designation
LEFT JOIN daily_attendances da
ON (da.emp_id = ej.emp_id AND da.in_time != '' AND da.date = '2017-06-02')
WHERE ed.department = 4
GROUP BY ej.designation ,ed.name
据我了解,第一个aury列出了名称和名称。 第二个查询是计算每个指定的所有出席人数。
如果您想JOIN
这两个查询,则链接designation
。 我使用了SUM&COALSESCE,因为最终结果集将再次按该名称分组-因此,我必须在当前数量上使用聚合函数。 COALESCE将返回0而不是NULL。 以防万一结果集之间不匹配。
这是您要寻找的东西吗? 如果没有,请添加评论。
SELECT ed.name
,COUNT(ej.designation) AS actual
,SUM(COALESCE(pres.present,0)) AS present
FROM emp_designations ed
INNER JOIN emp_job_details ej
ON ed.id = ej.designation
LEFT OUTER JOIN
(
SELECT ej.designation
,COUNT(*) as present
FROM daily_attendances da
INNER JOIN emp_job_details ej
ON da.emp_id = ej.emp_id
WHERE da.in_time != ''
AND da.date = '2017-06-02'
GROUP BY ej.designation
) pres
ON pres.designation = ej.designation
WHERE ed.department = 4
GROUP BY ej.designation
,ed.name
如果要消除呈现的任何重复记录,可以使用UNION。 如果重复没有关系,请尝试使用UNION ALL,这将对您有所帮助。
在以下位置阅读有关这些命令的信息: https : //dev.mysql.com/doc/refman/5.7/en/union.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.