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.id
eftersom vi inte har något intervju_id-fält iinterviews
tabell, skulle det varaid
fält - baserat på din fråga. pr.interview_id = i.id
iwhere
klausul :Omparticipant_rating
tabellen 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 JOIN
förparticipant_rating
tabell.sr.interview_id = i.id
iwhere
klausul :Omsystem_rating
tabellen 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 JOIN
försystem_rating
bord också.Usage of AVG
fungerar 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