Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql क्वेरी SUM () का संयोजन आंतरिक जुड़ाव का उपयोग करके परिणाम देता है

पहले योग बनाओ, फिर जुड़ो। इस तरह:

SELECT i.uid
      ,i.date
      ,i.v_in
      ,COALESCE(o.v_out, 0) AS v_out
      ,(i.v_in - COALESCE(o.v_out, 0)) AS balance
FROM (
    SELECT date
          ,uid
          ,SUM(value_in) AS v_in
    FROM   table1
    GROUP  BY 1,2
    ) i
LEFT JOIN (
    SELECT date
          ,uid
          ,SUM(value_out) AS v_out
    FROM   table2
    GROUP  BY 1,2
    ) o USING (date, uid)

जिस तरह से आपके पास था, हर value_in प्रत्येक मिलान value_out . के साथ जोड़ा जाएगा , इस प्रकार संख्याओं को गुणा करना। आपको पहले समेकित करना होगा और फिर आप एक . में शामिल होंगे एक . के साथ कुल मिलाकर आउट-सम और सब कुछ ग्रोवी है। या है?

अगर कोई value_in नहीं है तो क्या होगा? या value_out किसी दिए गए (date, uid) . के लिए ? या केवल value_in या सिर्फ value_out ? आपकी क्वेरी विफल हो जाएगी।

मैंने LEFT JOIN . का उपयोग करके सुधार किया है [INNER] JOIN . के बजाय , लेकिन जो आप वास्तव में चाहते हैं वह है FULL OUTER JOIN - MySQL में अनुपलब्ध सुविधाओं में से एक।

आप या तो एक अलग तालिका में दिनों की सूची प्रदान कर सकते हैं और LEFT JOIN इसके लिए दोनों टेबल, या आप दो बार LEFT JOIN . के साथ लापता फीचर के आसपास काम कर सकते हैं और UNION . यहां देखें उदाहरण के लिए

या आप अपने value_out को गुणा कर सकते हैं द्वारा -1 यूनियन दोनों टेबल एक साथ और एक योग बनाते हैं।

लेकिन आप अभी भी बिना किसी value_in . के एक दिन के लिए कोई पंक्ति नहीं मिलेगी या value_out , जो आपके विवरण का उल्लंघन करता है।

तो, एकमात्र स्वच्छ समाधान सभी (date, uid) . के साथ एक टेबल होना है आप परिणाम में चाहते हैं और LEFT JOIN table1 . का योग और table2 इसके लिए, या UNION ALL तीन (नकारात्मक table2 ) उप-चयन में और फिर योग करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP फॉर्म के साथ अपने MySQL डेटाबेस को अपडेट करने के बारे में अच्छा ट्यूटोरियल?

  2. स्ट्रिंग में बड़े अक्षरों की गणना करें

  3. JTextField सेट से बचनाकार्यक्रम के चारों ओर पाठ पुनरावृत्ति

  4. एसक्यूएल सेलेक्ट स्टेटमेंट्स और पीडीओ में से अधिक या बराबर (> =) और उससे कम या बराबर (<=) का उपयोग

  5. mysql, कॉलम नामों के माध्यम से पुनरावृति