2009-11-29 156 views
1

我有一個表作爲事務日誌的結果:加入兩個SELECT語句

Date Action Qty 
11-23 ADD  1 
11-23 REMOVE 2 
11-23 ADD  3 

我想查詢單獨聚集所有增加了,所有的消除了給定日期。

每個select語句的正常工作,但他們不能加入:

select date, sum(qty) as Added from table where action='Add' and date='11-23' 

natural join 

select date, sum(qty) as Removed from table where action='Remove' and date='11-23' 

我可以每個SELECT語句的結果保存到一個表,然後加入那些?有沒有辦法一起避免這一切?

Thanks- 喬納森

回答

4

看看UNION語法,如果你真的想要的結果集的多個查詢的加入到一個:

http://dev.mysql.com/doc/refman/5.0/en/union.html


然而,這種情況下,看看GROUP BY

您可以對Date, Action進行分組,因此每次操作每天會產生一個記錄,SUM()可以爲您提供數量。

例如:

select 
    date, 
    action, 
    sum(qty) AS Quantity 
from 
    table 
group by 
    date, action 

會導致:

11-23 | ADD | 10 
11-23 | REMOVE | 5 
11-24 | ADD | 4 
11-24 | REMOVE | 3 
2

這將幫助,如果你表現出你真正想要的輸出。 從你的「爲增加」和「爲已移除」我猜你希望工會,但也許是這樣的:

select 
    date, 
    sum(if(action='ADD',qty,0)) as Added, 
    sum(if(action='REMOVE',qty,0)) as Removed 
from `table` 
where date='11-23'; 

(用group by date如果您選擇多個日期)