Mysql
 sql >> база данни >  >> RDS >> Mysql

Дублиране, включващо SUM, LEFT JOIN и GROUP BY

Така че първата стъпка, за да видите какво се случва, е да премахнете SUM и просто да изберете сумата на транзакцията и сумата на иска. По този начин можете да видите какви данни се връщат. Ще видите, че присъединяването на A/2007 ще има сумата на транзакцията два пъти, тъй като се присъединява към всеки ред към таблицата с претенции.

Едно решение е да използвате подзаявки, както казахте, за да направите SUM отделно, преди да се присъедините.

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. mysql избира времеви печати между a и b, връщайки всички или 0 времеви печати

  2. Не мога да използвам mysql_* функции след надграждане на PHP

  3. Емотиконите за iPhone се вмъкват в MySQL, но стават празна стойност

  4. Не може да се изпълни MySQL съхранена процедура от Java

  5. Не мога да инсталирам mysql2 gem на macOS Sierra