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;