2012-09-19 167 views
13

我有2个表格需要根据日期和2个值加在一起。Mysql UNION和GROUP BY

这给了我所有信息的列表 - 罚款。

$query = (SELECT date, debit, credit , note FROM proj3_cash) 
UNION 
(SELECT settle, purch, sale, issue FROM proj3_trades) 
ORDER BY date"; 

现在我需要将这两个表中每日总计的信息分组。

$query = "(SELECT date, SUM(debit), SUM(credit)FROM proj3_cash GROUP BY date) 
UNION 
(SELECT settle as date, SUM(purch) as debit, SUM(sale) as credit FROM proj3_trades GROUP BY date) 
ORDER BY date"; 

精细,但如果在同一天的东西在每个表中我得到这个:

date  SUM(debit) SUM(credit) 
-------------------------------------- 
2010-12-02 0.00   170.02 
2010-12-02 296449.91  233111.10 

我如何组两成的同一天?

如果我在最后添加GROUP BY - 我只会得到一个错误。或者这应该通过JOIN来完成?

回答

15

你可以做到这一点使用派生表:

SELECT date, SUM(debit), SUM(credit) 
FROM 
(
    SELECT date, debit, credit 
     FROM proj3_cash 
    UNION ALL 
    SELECT settle as date, 
      purch as debit, 
      sale as credit 
     FROM proj3_trades 
) derivedTable 
GROUP BY date 
ORDER BY date 

我已经改变了联盟UNION ALL,因为工会将消除这两个表中发现的重复。