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

MySQL SUM () गलत टोटल दे रहा है

आप aggregate fanout issue का सामना कर रहे हैं . ऐसा तब होता है जब किसी चयनित क्वेरी में प्राथमिक तालिका में उस द्वितीयक तालिका की तुलना में कम पंक्तियाँ होती हैं जिससे वह जुड़ी होती है। शामिल होने का परिणाम डुप्लिकेट पंक्तियों में होता है। इसलिए, जब कुल कार्य लागू होते हैं, तो वे अतिरिक्त पंक्तियों पर कार्य करते हैं।

यहां प्राथमिक तालिका उस तालिका को संदर्भित करती है जहां कुल कार्य लागू होते हैं। आपके उदाहरण में,
* SUM(matters.fee)>> टेबल पर एकत्रीकरण matters .
* SUM(advicetime*advicefee)>> टेबल पर एकत्रीकरण actions
* fixedfee='Y'>> जहां टेबल पर स्थिति matters

फैनआउट समस्या से बचने के लिए:
* हमेशा एक जॉइन में सबसे दानेदार टेबल पर एग्रीगेट लागू करें।
* जब तक कि दो टेबल में एक-से-एक संबंध न हो, तब तक से फ़ील्ड पर एग्रीगेट फ़ंक्शन लागू न करें। दोनों टेबल।
* अलग-अलग सबक्वेरी के ज़रिए अलग-अलग अपने एग्रीगेट प्राप्त करें और फिर परिणाम को संयोजित करें। यह एक SQL कथन में किया जा सकता है, या आप डेटा निर्यात कर सकते हैं और फिर कर सकते हैं।

प्रश्न 1:

SELECT SUM(fee) AS totfixed 
FROM matters 
WHERE fixedfee='Y'

प्रश्न 2:

SELECT SUM(actions.advicetime*actions.advicefee) AS totbills 
FROM matters  
JOIN actions ON matters.matterid = actions.matterid 
WHERE matters.fixedfee = 'Y'

Query 1 &Query 2 फैनआउट से पीड़ित न हों। इस बिंदु पर आप उन दोनों को निर्यात कर सकते हैं और परिणाम को php. या आप उन्हें SQL में संयोजित कर सकते हैं:

SELECT query_2.totbills, query_1.totfixed
FROM (SELECT SUM(fee) AS totfixed 
    FROM matters 
    WHERE fixedfee='Y') query_1,

    (SELECT SUM(actions.advicetime*actions.advicefee) AS totbills 
    FROM matters  
    JOIN actions ON matters.matterid = actions.matterid 
    WHERE matters.fixedfee = 'Y') query_2

अंत में, SUM कोई कीवर्ड नहीं लेता DISTINCT . DISTINCT केवल COUNT . के लिए उपलब्ध है और GROUP_CONCAT कुल कार्य। निम्नलिखित अमान्य SQL का एक भाग है

SUM(DISTINCT matters.fee) AS totfixed



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्ष () उदाहरण – MySQL

  2. mysql में मिलीसेकंड या माइक्रोसेकंड में लोड समय कैसे प्राप्त करें?

  3. अगले महीने की पहली और आखिरी तारीख MySQL में पाएं

  4. MySQL 3 टेबल्स में शामिल हों का चयन करें

  5. mysql_fetch_assoc ():आपूर्ति किया गया तर्क मान्य MySQL परिणाम संसाधन नहीं है