2017-07-08 110 views
0

我的数据库中有两列。栏r和栏l。 我有两行。行302和行303MYSQL计算返回错误的值

对于302行,我有以下数据

--------------------------- 
| k_id | l | r | 
|-------------------------- 
| 302  | 400 | 0 | 
| 303  | 0  | 400 | 
--------------------------- 

我试图运行SQL语句在ll选择总。

在这种情况下,计算结果必须是:400 - 400 = 0。但是当我运行查询时,我得到400而不是0

有人知道我为什么没有得到正确的答案吗?

这里是我的SQL语句:

SELECT COALESCE(SUM(l), 0) - COALESCE(SUM(r), 0) as total 
FROM trans 
WHERE user_id = '1' AND k_id IN ('302', '303') 
GROUP BY k_id WITH ROLLUP LIMIT 0,1 
+0

为什么'极限'? –

+0

为什么要使用COALESCE。为什么不加上“l”,然后减去“r”呢? – Difster

+0

我删除了限制,没有限制的响应是三行,第一行:'400',第二行:'-400',第三行:'0' – John

回答

2

的问题是语句的group by k_id一部分。这指示mysql通过k_id值进行求和,因此302和303将分开汇总。删除group by子句和汇总,你会得到0.