2013-12-07 3 views
0

Я пытаюсь присоединиться к 3 таблицам. В двух таблицах я беру суммы столбца. Я хочу применить условия к суммам, но я не делаю результат, который я хочу, с помощью приведенного ниже сценария. Суммы не суммируются правильно.Объединение таблиц в MySQL, где столбцы суммируются

SELECT 
account_list.Account_ID, 
account_list.Account_Name, 
account_list.Short_Name, 
account_list.Trader, 
account_list.Status, 
account_list.Notes, 
sum(account_commissions.Commission), 
sum(connection_cost.Monthly_Cost) 
FROM 
account_commissions 
Join 
connection_cost 
ON 
account_commissions.Account_ID = connection_cost.Account_ID 
AND 
connection_cost.Cost_Date > '2013-06-01' 
AND 
account_commissions.TDate > '2013-06-01'  
Right Join 
account_list 
ON 
account_list.Account_ID = connection_cost.Account_ID 
WHERE 
account_list.status = 'Active' 
GROUP BY 
Account_ID; 

условия я хочу на суммы:

sum account_commissions.Commission where account_commissions.TDate > '2013-06-01 Group BY Account_ID 

и

sum connection_cost.Monthy_Cost where connection_cost.Date > '2013-06-01' Group BY Account_ID. 

Я пытался добиться того, что с помощью выше и заявления, но это не правильно вычисления. Любая помощь в том, как применять эти условия к столбцам суммы, будет оценена по достоинству.

ответ

1

Я перешел на LEFT-JOIN, так как вам кажется, что вы хотите, чтобы все записи в списке учетных записей, и любое соответствующее суммирование затрат и комиссий на одну учетную запись. Таким образом, JOINs основаны на сумме() каждой таблицы отдельно, но сгруппированы по счету, THEN присоединились к основной таблице списка учетных записей.

SELECT 
     AL.Account_ID, 
     AL.Account_Name, 
     AL.Short_Name, 
     AL.Trader, 
     AL.Status, 
     AL.Notes, 
     coalesce(preSumCC.CC_Costs, 0) as MonthlyCosts, 
     coalesce(preSumComm.AC_Commission, 0) as Commissions 
    FROM 
     account_list AL 
     LEFT JOIN (SELECT CC.Account_ID, 
          SUM(CC.Monthly_Cost) CC_Costs 
         FROM 
          connection_cost CC 
         where 
          CC.Cost_Date > '2013-06-01' 
         group by 
          CC.Account_ID) preSumCC 
      ON AL.Account_ID = preSumCC.Account_ID 

     LEFT JOIN (select AC.Account_ID, 
          SUM(AC.Commission) AC_Commission 
         FROM 
          account_commissions AC 
         where 
          AC.TDate > '2013-06-01' 
         group by 
          AC.Account_ID) preSumComm 
      ON AL.Account_ID = preSumComm.Account_ID 
+0

Это точно. Продюсировал результат, который я искал. Спасибо. – Stevenyc091

0

Вы можете создать в MySQL условный SUM использованием IF:

SUM(IF(account_commisions.TDate >'2013-01-01',account_commissions_Commission, 0)) 

Чтобы быть более портативными, вы должны использовать CASE как IF не является частью стандарта SQL. Тем не менее я склонен найти IF.

+0

Использование Если это кажется суммой в соответствии с условиями даты, но, похоже, она не применяет условие Group By к операторам суммы, поскольку оно все еще неправильно вычисляет. Мне нужно суммировать комиссионные, сгруппированные по Account_ID, с датой начала. – Stevenyc091

+0

@Steve вы целые 'SELECT', если сгруппированы таким образом, так что все должно быть в порядке. Обновите свой ответ примером того, что вы получаете, и тем, что вы ожидаете. –

Смежные вопросы