Brug LEFT JOIN
for at sikre, at hvis relationstabeller ikke har nogen data, kan vi stadig have poster fra hovedtabellen.
Reference:Forstå MySQL LEFT JOIN
Problem(er) :
- Forkert feltnavn :
pr.interview_id = i.interview_id
, skal det værepr.interview_id = i.id
da vi ikke har noget interview_id felt iinterviews
tabel, ville det væreid
felt - baseret på din forespørgsel. pr.interview_id = i.id
iwhere
klausul :Hvisparticipant_rating
tabel ikke har nogen registreringer for et givet interview, vil dette medføre, at det pågældende interview fjernes fra resultatsættet. BrugLEFT JOIN
forparticipant_rating
tabel.sr.interview_id = i.id
iwhere
klausul :Hvissystem_rating
tabel ikke har nogen registreringer for et givet interview, vil dette medføre, at det pågældende interview fjernes fra resultatsættet. BrugLEFT JOIN
forsystem_rating
også bord.Usage of AVG
virker, men virker ikke for andre aggregatfunktioner somSUM, COUNT
.. fordi hvis vi har et til mange forhold, så vil join bevirke, at der vil være flere poster for den samme række.
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