चूंकि आपके पास प्रति ग्राहक कई लेन-देन, अन्य ऋण राशि और भुगतान हैं, इसलिए आप सीधे JOIN
नहीं कर सकते हैं तालिकाओं को एक-दूसरे से जोड़ दें क्योंकि इससे पंक्तियों की प्रतिकृति बन जाएगी, जिसके परिणामस्वरूप गलत मान होंगे। इसके बजाय, हम SUM
क्लाइंट के आधार पर प्रत्येक तालिका के भीतर सभी मान पहले JOIN
. इसके अतिरिक्त, चूंकि कुछ क्लाइंट के पास प्रत्येक तालिका में प्रविष्टियां नहीं होती हैं, इसलिए आपको LEFT JOIN
का उपयोग करना चाहिए s और COALESCE
परिणामों पर ताकि खाली पंक्तियाँ SUM को NULL
न बनने दें . यह प्रश्न आपको वांछित परिणाम देगा:
SELECT c.id, c.name,
COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS amount
FROM client c
LEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS transactions
FROM transaction
GROUP BY id) t on t.id = c.id
LEFT JOIN (SELECT id, SUM(amount) AS amounts
FROM other_loan
GROUP BY id) o ON o.id = c.id
LEFT JOIN (SELECT id, SUM(payment_amount) AS payments
FROM payment
GROUP BY id) p ON p.id = c.id
GROUP BY c.id
आउटपुट (आपके नमूना डेटा के लिए):
id name amount
1 Robin 8718
2 Cinderella 21
3 Leomar 0