Använd LEFT JOIN för att säkerställa att om relationstabeller inte har några data, kan vi fortfarande ha poster från huvudtabellen.
Referens:Förstå MySQL LEFT JOIN
Problem(er) :
- Fel fältnamn :
pr.interview_id = i.interview_id, bör det varapr.interview_id = i.ideftersom vi inte har något intervju_id-fält iinterviewstabell, skulle det varaidfält - baserat på din fråga. pr.interview_id = i.idiwhereklausul :Omparticipant_ratingtabellen inte har några register för en given intervju, kommer detta att leda till att den intervjun tas bort från resultatuppsättningen. AnvändLEFT JOINförparticipant_ratingtabell.sr.interview_id = i.idiwhereklausul :Omsystem_ratingtabellen inte har några register för en given intervju, kommer detta att leda till att den intervjun tas bort från resultatuppsättningen. AnvändLEFT JOINförsystem_ratingbord också.Usage of AVGfungerar men fungerar inte för andra aggregatfunktioner somSUM, COUNT.. för om vi har en till många relationer så kommer join göra att det kommer att finnas flera poster för samma rad.
Lösning :
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