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