Esta consulta deve ser capaz de ajudá-lo. A maior coisa que faz é contar TODOS os compromissos para o total e, em seguida, SOMA em um status IF =concluído para obter o total e o concluído na mesma consulta.
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
Além disso, eu estava percebendo que você disse que era um relacionamento de um para muitos. Tabelas relacionais como as que você tem são realmente para muitos para muitos. A maneira mais eficiente de ter um Um para Muitos é se livrar do
com_event_schedules_com_appointment_c
tabela e adicione um com_event_schedule_id
para o com_appointments
tabela.