#mysql #mysql-8.0
#mysql #mysql-8.0
Вопрос:
У меня есть данные, которые выглядят как,
id tag value
1 C 2000
1 C 2000
2 C 2000
1 D 1500
1 D 1200
3 D 2500
У меня есть требование, согласно которому я должен получить чистое значение на основе тегов sum (D)- sum (C)
Мой запрос,
select 'C' as tag,t1.Debit - t.Credit as result from
(SELECT `tag` , sum(value) as Credit
FROM
test
WHERE
tag = 'C' group by `tag` ) t
join (
SELECT `tag` , sum(value) as Debit
FROM
test
WHERE
tag = 'D' group by `tag`
)t1;
выдает результат как,
tag result
C -800 -- (5200 - 6000)
что является правильным результатом с учетом приведенных выше данных.
Однако, если все теги будут разделены, запрос не возвращает значений, но я ожидаю, что результат будет равен 11200, что является общим числом D.
Комментарии:
1. У вас есть только эти два тега C или D?
Ответ №1:
SELECT SUM(CASE WHEN tag='D' THEN value ELSE 0 END)
- SUM(CASE WHEN tag='C' THEN value ELSE 0 END)
FROM test
Ответ №2:
Вы можете попробовать что-то вроде этого:
select sum(CASE WHEN tag='D' THEN value ELSE 0 END)-sum(CASE WHEN tag='C' THEN value ELSE 0 END) as val from test;
Если вы собираетесь использовать только ‘D’ или ‘C’ в качестве тега.
затем
select sum(CASE WHEN tag='D' THEN value ELSE -value END) as val from test;