Вычитание двух сумм из одной таблицы - PullRequest
1 голос
/ 03 апреля 2012

Мне нужна ваша помощь в отношении запроса, который я не могу получить в одном запросе.

Table timeaccount

Field   Type
id      mediumint(8)   --> Primary key autoincrement
user    varchar(40)    --> user, e.g. 'john.fisher'
type    varchar(15)    --> can only be 'SUM' or 'SUBSTRACT'
minutes smallint(5)    --> an amount of minutes

Это представляет учет рабочего времени для работников, где каждая запись показывает, сколько минут работник (поле'user') добавил или вычел из своего баланса (в соответствии с полем 'type').

Я просто хочу получить в одном запросе баланс от конкретного работника, в псевдо-sql это будет:

select sum(minutes) from timeaccount where worker = 'john.fisher' and type = 'SUM'
-
select sum(minutes) from timeaccount where worker = 'john.fisher' and type = 'SUBSTRACT'

as balance

Спасибо за помощь,

Ответы [ 4 ]

6 голосов
/ 03 апреля 2012
SELECT
  SUM(IF(type = 'SUM', minutes, 0)) -
  SUM(IF(type = 'SUBTRACT', minutes, 0)) AS balance
FROM timeaccount
WHERE worker = 'john.fisher'
3 голосов
/ 03 апреля 2012

В качестве альтернативы:

SELECT SUM(minutes * case type when 'SUBTRACT' then -1 else 1 end) AS balance
FROM timeaccount
WHERE worker = 'john.fisher' and type in ('SUM','SUBTRACT')
2 голосов
/ 03 апреля 2012
SELECT (SUM_VAL - SUBSTRACT_VAL) as balance FROM
(
 select sum(minutes) AS SUM_VAL FROM timeaccount WHERE worker = 'john.fisher' AND type =     'SUM', 
 select sum(minutes) AS SUBSTRACT_VAL FROM timeaccount WHERE worker = 'john.fisher' AND type = 'SUBSTRACT'
) t1
0 голосов
/ 03 апреля 2012

Попробуйте это:

select sum(if(type = 'SUM', minutes, 0)) - sum(if(type = 'SUBSTRACT', minutes, 0)) as balance from timeaccount where worker = 'john.fisher'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...