Използвайте LEFT JOIN за да сме сигурни, че таблиците на релациите нямат никакви данни, все пак можем да имаме записи от основната таблица.
Справка:Разбиране на MySQL LEFT JOIN
Проблем(и) :
- Грешно име на поле :
pr.interview_id = i.interview_id, трябва да бъдеpr.interview_id = i.idтъй като нямаме поле interview_id вinterviewsтаблица, това ще бъдеidполе - въз основа на вашата заявка. pr.interview_id = i.idвwhereклаузата :Акоparticipant_ratingтаблицата няма записи за дадено интервю, това ще доведе до премахването на това интервю от набора от резултати. ИзползвайтеLEFT JOINзаparticipant_ratingмаса.sr.interview_id = i.idвwhereклаузата :Акоsystem_ratingтаблицата няма записи за дадено интервю, това ще доведе до премахването на това интервю от набора от резултати. ИзползвайтеLEFT JOINзаsystem_ratingмаса също.Usage of AVGработи, но няма да работи за други агрегатни функции катоSUM, COUNT.. защото ако имаме една към много връзки, тогава присъединяването ще направи, че ще има множество записи за един и същи ред.
Решение :
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