Присоединиться к результатам двух выбранных утверждений - PullRequest
1 голос
/ 29 ноября 2009

У меня есть таблица, служащая журналом транзакций:

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 в таблице, а затем объединить их? Есть ли способ избежать всего этого вместе?

Благодарения и Jonathan

Ответы [ 2 ]

4 голосов
/ 29 ноября 2009

Посмотрите на синтаксис 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 голосов
/ 29 ноября 2009

Было бы полезно, если бы вы показали, какой вывод вы действительно хотите. Из ваших «как добавлено» и «как удалено» я предполагаю, что вы не не хотите объединение, но, возможно, что-то вроде этого:

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, если вы выбираете несколько дат.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...