sql >> Base de Datos >  >> RDS >> Mysql

Consulta COUNT complicada en MySQL

La sugerencia de X-Zero de agregar un "crédito de cargador" a los datos es la mejor manera de simplificar la consulta. Si esa no es una opción, haga una combinación interna entre userprofile_videoinfo y userprofile_videocredit para que sea más fácil eliminar los duplicados:

SELECT u.id, u.full_name, COUNT(DISTINCT v.video_id) as credit_count
FROM userprofile_userprofile u
LEFT JOIN (SELECT vi.video_id, vi.uploaded_by_id, vc.profile_id as credited_to_id
    FROM userprofile_videoinfo vi
    JOIN userprofile_videocredit vc ON vi.id = vc.video_id
    ) v ON u.id = v.uploaded_by_id OR u.id = v.credited_to_id
GROUP BY u.id, u.full_name
ORDER BY credit_count DESC

La subconsulta puede ser útil para crear una vista.