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.id
karena kami tidak memiliki kolom interview_id diinterviews
tabel, itu akan menjadiid
bidang - berdasarkan kueri Anda. pr.interview_id = i.id
diwhere
klausa :Jikaparticipant_rating
tabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. GunakanLEFT JOIN
untukparticipant_rating
meja.sr.interview_id = i.id
diwhere
klausa :Jikasystem_rating
tabel tidak memiliki catatan untuk wawancara tertentu, ini akan menyebabkan penghapusan wawancara tersebut dari kumpulan hasil. GunakanLEFT JOIN
untuksystem_rating
meja juga.Usage of AVG
berfungsi 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