Сумма в одном столбце с двумя разными условиями. - PullRequest
1 голос
/ 12 апреля 2019

У меня есть таблица с именем Заказ со схемой

user_id, state    amount
11       success  100
11       FAILED   10
11       FAILED   10
11       success  17

состояние может иметь два значения (Успешно / Сбой).

Я хочу получить sum(amount) when state = "SUCCESS" - sum(amount) when state = "FAILED" означает разницу общей суммы при успехе - общую сумму при ошибке.

Я могу решить эту проблему в 2 запроса.

A = select id, sum(amount) when state = "SUCCESS"
B = select id, sum(amount) when state = "FAILED"

И решение будет A-B . Есть ли способ, которым я могу добиться этого в одном запросе SQL?

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Использовать условную агрегацию:

select id,
       sum(case when state = 'SUCCESS' then amount else - amount end) as total
from t
where state in ('SUCCESS', 'FAILED')
group by id;

Я предполагаю, что вы хотите получить эту сумму за id, а не по всей таблице.

1 голос
/ 12 апреля 2019

вариант использования, когда

    select user_id,sum(case when state = 'SUCCESS' then amount else 0 end)-sum(case when state = 'FAILED' then amount else 0 end)
from table group by user_id
0 голосов
/ 12 апреля 2019
select sum(case when state = "SUCCESS" then amount else o end) -
    sum(case when state = "FAILED" then amount else o end)
    from tbl
group by userid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...