LEFT JOIN
का उपयोग करें यह सुनिश्चित करने के लिए कि संबंध तालिकाओं में कोई डेटा नहीं है, फिर भी हम मुख्य तालिका से रिकॉर्ड प्राप्त कर सकते हैं।
संदर्भ:MySQL LEFT JOIN को समझना
समस्याएं :
- गलत फ़ील्ड नाम :
pr.interview_id = i.interview_id
, यहpr.interview_id = i.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