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.id
ya que no tenemos ningún campo id_entrevista eninterviews
tabla, seríaid
campo - basado en su consulta. pr.interview_id = i.id
enwhere
cláusula :Siparticipant_rating
la tabla no tiene ningún registro para una entrevista dada, esto provocará la eliminación de esa entrevista del conjunto de resultados. UsaLEFT JOIN
paraparticipant_rating
mesa.sr.interview_id = i.id
enwhere
cláusula :Sisystem_rating
la tabla no tiene ningún registro para una entrevista dada, esto provocará la eliminación de esa entrevista del conjunto de resultados. UsaLEFT JOIN
parasystem_rating
mesa también.Usage of AVG
funciona 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