соединение не возвращает ожидаемый результат в mysql

#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.

dbfiddle

Комментарии:

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;