To zapytanie powinno być w stanie Ci pomóc. Najważniejszą rzeczą, jaką robi, jest liczenie WSZYSTKICH spotkań jako suma, a następnie SUMA w statusie IF =zakończone, aby uzyskać zarówno sumę, jak i ukończone w tym samym zapytaniu.
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
Zauważyłem też, że powiedziałeś, że to była relacja „jeden do wielu”. Stoły relacyjne, takie jak ty, są naprawdę dla wielu do wielu. Najskuteczniejszym sposobem uzyskania opcji „jeden do wielu” jest pozbycie się com_event_schedules_com_appointment_c
tabelę i dodaj com_event_schedule_id
do com_appointments
tabela.