2010-03-05 28 views

Trả lời

40
select id, sum(amount) from (
    select id,amount from table_1 union all 
    select id,amount from table_2 union all 
    select id,amount from table_3 
) x group by id 
+1

Tôi đang tìm cách để thực hiện việc này trong chế độ xem, nhưng truy vấn phụ không được phép trong chế độ xem. Có cách nào khác không? –

+1

làm cho truy vấn phụ khác xem – Jimmy

9
SELECT id, SUM(amount) FROM 
(
    SELECT id, SUM(amount) AS `amount` FROM t1 GROUP BY id 
    UNION ALL 
    SELECT id, SUM(amount) AS `amount` FROM t2 GROUP BY id 
) `x` 
GROUP BY `id` 

Tôi groupped mỗi bảng và đoàn kết bởi vì tôi nghĩ rằng nó có thể nhanh hơn, nhưng bạn nên thử cả hai giải pháp.

2

Subquery:

SELECT id, SUM(amount) 
FROM (SELECT * FROM t1 
     UNION ALL SELECT * FROM t2 
     UNION ALL SELECT * FROM t3 
    ) 
GROUP BY id 
+0

Lưu ý: bạn không nên sử dụng lựa chọn * trong trường hợp này. –

+0

Lưu ý 2: Tôi đặt cược mysql sẽ yêu cầu bạn gán bí danh cho truy vấn phụ – zerkms

+0

@David: Chắc chắn, xấu của tôi. Có lẽ không quan trọng nếu id và số tiền là hai cột duy nhất, nhưng cơ hội đó là gì? @zerkms: Cũng đúng. – adharris

0

Không chắc chắn nếu MySQL sử dụng biểu thức bảng chung nhưng tôi sẽ làm điều này trong postgres:

WITH total AS(
       SELECT id,amount AS amount FROM table_1 UNION ALL 
       SELECT id,amount AS amount FROM table_2 UNION ALL 
       SELECT id,amount AS amount FROM table_3 
      ) 
SELECT id, sum(amount) 
    FROM total 

Tôi nghĩ rằng nên làm các trick là tốt.

Các vấn đề liên quan