Mysql 正值或负值取决于关系-是否可以在单个语句中选择SUM(…)?

Mysql 正值或负值取决于关系-是否可以在单个语句中选择SUM(…)?,mysql,sql,Mysql,Sql,资产表中的每一行都包含字段值和类型。type字段是与types表的一种关系,其中每行都有一个字段为负: // assets id | value | type ---------------------- 1 | 10 | 1 2 | 4 | 2 3 | 1 | NULL // types id | is_negative ------------------ 1 | 0 2 | 1

资产
表中的每一行都包含字段
类型
type
字段是与
types
表的一种关系,其中每行都有一个字段
为负

// assets
id  |  value  |  type
----------------------
 1  |   10    |   1
 2  |    4    |   2
 3  |    1    |   NULL


// types   
id  |  is_negative  
------------------
 1  |    0    
 2  |    1    
我想查询所有资产值的总和,其中类型指定值是负值还是正值。没有类型的资产应具有负值

在上面的例子中,结果应该是
10-4-1=5

在单个
SELECT SUM(value)…
语句中,这是否可能

是的,很容易

SELECT SUM(IF(is_negative = 1 OR is_negative IS NULL, value * -1, value))
FROM assets a
LEFT JOIN types t ON a.type = t.id
棘手的方法(避免条件):

另一种方式(更具可读性):


…或者非常相似

 SELECT SUM(CASE WHEN COALESCE(is_negative,1)= 1 THEN value * -1 ELSE value END) x 
   FROM assets x 
   LEFT 
   JOIN types y
     ON y.id = x.type;

看看你在那里做了什么。。。很好:-)@草莓我不喜欢环境;-)
select sum(value * case when not is_negative then 1 else -1 end)
from assets a
left join types t on t.id = a.type;
 SELECT SUM(CASE WHEN COALESCE(is_negative,1)= 1 THEN value * -1 ELSE value END) x 
   FROM assets x 
   LEFT 
   JOIN types y
     ON y.id = x.type;