Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL Query duas condições diferentes para contagem diferente em 1 consulta


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.