Това запитване трябва да може да ви помогне. Най-голямото нещо, което прави, е да преброи ВСИЧКИ ангажименти за общо и след това SUM при състояние IF =завършено, за да получите както общото, така и завършеното в една и съща заявка.
SELECT
sc.id,
COUNT(ap.id) as total,
SUM(IF(status = 'completed', 1, 0)) as completed
FROM
com_event_schedules sc
LEFT JOIN
com_event_schedules_com_appointment_c re
ON re.com_event_schedules_com_appointmentcom_event_schedules_ida = sc.id
LEFT JOIN
com_appointment ap
ON re.com_event_schedules_com_appointmentcom_appointment_idb = ap.id
WHERE
sc.deleted = 0
GROUP BY
sc.id
Освен това забелязах, че казахте, че това е връзка „един към много“. Релационни таблици като вас са наистина за много към много. Най-ефективният начин да имате Един към Много е да се отървете от com_event_schedules_com_appointment_c
таблица и добавете com_event_schedule_id
към com_appointments
таблица.