Gunakan LEFT JOIN untuk memastikan jika tabel relasi tidak memiliki data apapun, kita tetap dapat memiliki record dari tabel utama.
Referensi:Memahami MySQL LEFT JOIN
Masalah :
- Nama bidang salah :
pr.interview_id = i.interview_id, seharusnyapr.interview_id = i.idkarena kami tidak memiliki kolom interview_id diinterviewstabel, itu akan menjadiidbidang - berdasarkan kueri Anda. pr.interview_id = i.iddiwhereklausa :Jikaparticipant_ratingtabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. GunakanLEFT JOINuntukparticipant_ratingmeja.sr.interview_id = i.iddiwhereklausa :Jikasystem_ratingtabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. GunakanLEFT JOINuntuksystem_ratingmeja juga.Usage of AVGberfungsi tetapi tidak akan berfungsi untuk fungsi agregat lainnya sepertiSUM, COUNT.. karena jika kita memiliki relasi one to many maka join akan membuat akan ada beberapa record untuk baris yang sama.
Solusi :
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