Usa LEFT JOIN
per assicurarci che le tabelle di relazione non abbiano dati, possiamo comunque avere record dalla tabella principale.
Riferimento:Capire MySQL LEFT JOIN
Problemi :
- Nome campo errato :
pr.interview_id = i.interview_id
, dovrebbe esserepr.interview_id = i.id
poiché non abbiamo alcun campo interview_id ininterviews
tabella, sarebbeid
campo - in base alla tua richiesta. pr.interview_id = i.id
inwhere
clausola :Separticipant_rating
la tabella non ha alcun record per una determinata intervista, ciò comporterà la rimozione di tale intervista dal set di risultati. UsaLEFT JOIN
perparticipant_rating
tabella.sr.interview_id = i.id
inwhere
clausola :Sesystem_rating
la tabella non ha alcun record per una determinata intervista, ciò comporterà la rimozione di tale intervista dal set di risultati. UsaLEFT JOIN
persystem_rating
anche tavolo.Usage of AVG
funziona ma non funzionerà per altre funzioni aggregate comeSUM, COUNT
.. perché se abbiamo da una a molte relazioni, join farà sì che ci saranno più record per la stessa riga.
Soluzione :
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