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

SUM, LEFT JOIN और GROUP BY को शामिल करते हुए दोहराव

तो क्या हो रहा है यह देखने के लिए पहला कदम एसयूएम को हटाना है और केवल लेनदेन राशि और दावा राशि का चयन करना है। इस तरह आप देख सकते हैं कि कौन सा डेटा लौटाया जा रहा है। आप देखेंगे कि A/2007 में शामिल होने पर लेन-देन की राशि दो बार होगी, क्योंकि यह दावा तालिका में प्रत्येक पंक्ति में शामिल हो रही है।

एक समाधान सबक्वेरी का उपयोग करना है, जैसा कि आपने कहा, शामिल होने से पहले एसयूएम अलग से करना।

SELECT 
   Transactions.Customer,
   Transactions.Year,
   SumTransaction,
   SumClaim
FROM (
      select Customer, Year, sum(Transaction Amount) SumTransaction 
      from Transactions
      group by Customer, Year
   ) Transactions
   LEFT JOIN (
      select Customer, Year, sum(Claim Amount) sumClaim 
      from Claims
      group by Customer, Year
   ) Claims
   ON Claims.Customer = Transactions.Customer
      AND Transactions.Year = Claims.Year

आपके प्रतिबंधों को देखते हुए एक और संभावित समाधान:

SELECT 
   Transactions.Customer,
   Transactions.Year,
   SUM(Transaction Amount),
   (SELECT SUM(Claim Amount) from Claims where Claims.Customer = Transactions.Customer and Claims.Year = Transactions.Year)
FROM 
   Transactions
GROUP BY
   Customer, Year

तीसरा संभावित समाधान !! इसे किसी सबक्वायरी की आवश्यकता नहीं है! इसे देखें SQL Fiddle

select
    t.Customer,
    t.Year,
    sum(distinct t.Amount),
    sum(c.Amount)
from
    Transactions t
    left join Claims c
        on  t.Customer = c.Customer
            and t.Year = c.year
group by
    t.Customer,
    t.Year


  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. PHP MYSQL बहुआयामी सरणी

  3. MySQL:कई टेबल या कई डेटाबेस?

  4. mySQL में विदेशी कुंजियाँ और NULL

  5. तालिका की दूसरी अंतिम पंक्ति mysql