Gebruik LEFT JOIN om er zeker van te zijn dat als relatietabellen geen gegevens hebben, we toch records uit de hoofdtabel kunnen hebben.
Referentie:MySQL LEFT JOIN begrijpen
Probleem(en) :
- Onjuiste veldnaam :
pr.interview_id = i.interview_id, het moetpr.interview_id = i.id. zijn omdat we geen interview_id-veld hebben ininterviewstabel, zou hetid. zijn veld - gebaseerd op uw zoekopdracht. pr.interview_id = i.idinwhereclausule :Alsparticipant_ratingtabel geen records heeft voor een bepaald interview, zal dit ertoe leiden dat dat interview uit de resultatenset wordt verwijderd. GebruikLEFT JOINvoorparticipant_ratingtafel.sr.interview_id = i.idinwhereclausule :Alssystem_ratingtabel geen records heeft voor een bepaald interview, zal dit ertoe leiden dat dat interview uit de resultatenset wordt verwijderd. GebruikLEFT JOINvoorsystem_ratingtafel ook.Usage of AVGwerkt maar werkt niet voor andere aggregatiefuncties zoalsSUM, COUNT.. want als we een te veel relaties hebben, dan zorgt join ervoor dat er meerdere records voor dezelfde rij zijn.
Oplossing :
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