2012-09-19 69 views
13

Tôi có 2 bảng tôi cần cộng lại dựa trên ngày và 2 giá trị.Mysql UNION and GROUP BY

Điều này cho tôi danh sách tất cả thông tin - tiền phạt.

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

Bây giờ tôi cần GROUP thông tin cho tổng số hàng ngày từ hai bảng.

$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"; 

Fine, nhưng nếu có cái gì đó vào cùng ngày trong mỗi bảng tôi có được điều này:

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

Làm thế nào để nhóm hai vào cùng một ngày?

Nếu tôi thêm GROUP BY vào cuối - tôi chỉ gặp lỗi. Hoặc điều này nên được thực hiện với một JOIN?

Trả lời

15

Bạn có thể đạt được điều này bằng bảng xuất phát:

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 

Tôi đã thay đổi UNION UNION ALL vì đoàn sẽ loại bỏ các bản sao được tìm thấy trong cả hai bảng.