我有一张表作为交易日志:
Date Action Qty
11-23 ADD 1
11-23 REMOVE 2
11-23 ADD 3
我想查询在给定日期分别聚合所有ADD和所有REMOVE。
这些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- 乔纳森
答案 0 :(得分: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
答案 1 :(得分: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
。)