1

我有一个用作事务日志的表:

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

我想要一个查询来分别汇总给定日期的所有 ADD 和所有 REMOVE。

这些选择语句中的每一个都可以正常工作,但它们不能被加入:

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 语句的结果存储到一个表中,然后加入这些表吗?有没有办法一起避免这一切?

谢谢-乔纳森

4

2 回答 2

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
于 2009-11-29T05:58:18.260 回答
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如果您选择多个日期,则使用 a。)

于 2009-11-29T06:09:20.073 回答