首页 > 解决方案 > 加入未在 mysql 中返回预期结果

问题描述

我有看起来像的数据,

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)

给出上述数据的正确结果。

但是,如果所有标签都是D,则查询不会返回任何值,但我希望结果为 11200,即 D 的总数。

小提琴手

标签: mysqlmysql-8.0

解决方案


SELECT   SUM(CASE WHEN tag='D' THEN value ELSE 0 END)
       - SUM(CASE WHEN tag='C' THEN value ELSE 0 END)
FROM test

小提琴


推荐阅读