LEFT JOIN与表一起两次以获得单独的记录

Yas*_*sai 2 mysql join group-by aggregate-functions left-join

我试图得到所有员工缺席和现在的总数,通过左employees表加入表格,attendance_chart其中包含attendance_status列中存在的记录

SELECT
    e.id AS employee_id,
    COUNT(present_days_chart.id) as present_days_count,
    COUNT(absent_days_chart.id) as absent_days_count

FROM
    employees e
    LEFT JOIN attendance_chart present_days_chart ON e.id = present_days_chart.attendance_for_employee_id AND present_days_chart.attendance_status = 'present'
    LEFT JOIN attendance_chart absent_days_chart ON e.id = absent_days_chart.attendance_for_employee_id AND absent_days_chart.attendance_status = 'absent'

WHERE
    e.id IN (106,138)

GROUP BY
    e.id
Run Code Online (Sandbox Code Playgroud)

但是,查询会在每行的present_days_count和absent_days_count列中返回相同数量的记录.

我究竟做错了什么 ?

rbr*_*r94 5

尝试使用CASE WHENSUM:

SELECT e.id,
       SUM(CASE WHEN days_chart.attendance_status = 'present' THEN 1 ELSE 0 END) AS present_days_count , 
       SUM(CASE WHEN days_chart.attendance_status = 'absent' THEN 1 ELSE 0 END) AS absent_days_count

FROM employees e
LEFT JOIN attendance_chart days_chart ON e.id = days_chart.attendance_for_employee_id
WHERE e.id in (106,138)
GROUP BY e.id
Run Code Online (Sandbox Code Playgroud)

有了这个SUM+ CASE WHEN结构应该指望每一个具有特定记录attendance_status,并在年底的帮助下总结了所有指控SUM,并GROUP BY