Usa LEFT JOIN para asegurarnos de que si las tablas de relaciones no tienen ningún dato, todavía podemos tener registros de la tabla principal.
Referencia:Comprender MySQL LEFT JOIN
Problemas :
- Nombre de campo incorrecto :
pr.interview_id = i.interview_id, debería serpr.interview_id = i.idya que no tenemos ningún campo id_entrevista eninterviewstabla, seríaidcampo - basado en su consulta. pr.interview_id = i.idenwherecláusula :Siparticipant_ratingla tabla no tiene ningún registro para una entrevista dada, esto provocará la eliminación de esa entrevista del conjunto de resultados. UsaLEFT JOINparaparticipant_ratingmesa.sr.interview_id = i.idenwherecláusula :Sisystem_ratingla tabla no tiene ningún registro para una entrevista dada, esto provocará la eliminación de esa entrevista del conjunto de resultados. UsaLEFT JOINparasystem_ratingmesa también.Usage of AVGfunciona pero no funcionará para otras funciones de agregados comoSUM, COUNT.. porque si tenemos relaciones de uno a muchos, la combinación hará que haya múltiples registros para la misma fila.
Solución :
SELECT
i.id AS interview_id,
i.candidate,
AVG(sr.rating) AS system_rating,
AVG(CASE WHEN pr.rater_type = 'Candidate' THEN pr.rating END) AS candidate_rating,
AVG(CASE WHEN pr.rater_type = 'Recruiter' THEN pr.rating END) AS recruiter_rating
FROM interviews i
LEFT JOIN system_rating sr ON sr.interview_id = i.id
LEFT JOIN participant_rating pr ON pr.interview_id = i.id
-- WHERE i.id IN (1, 2, 3) -- use whenever required
GROUP BY i.id