2017-07-08 17 views
0

私のデータベースには2つの列があります。列rおよび列l。 私は2つの行を持っています。行302および行303。行302についてはMYSQL計算で間違った値が返されます

私は、行llで合計を選択するために、SQLステートメントを実行しようとしています

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

次のようなデータを持っています。

この場合、計算は400 - 400 = 0である必要があります。しかし、クエリを実行すると0の代わりに400が得られます。

誰かが正しい回答を得られない理由を知っていますか?ここで

は私の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

なぜ 'limit'ですか? –

+0

なぜCOALESCEを使用するのですか?単に "l"を加えてから "r"を引いてみるのはなぜですか? – Difster

+0

制限を削除しましたが、応答が3行、最初の行: '400'、2行目:' -400'、3行目: '0' – John

答えて

2

問題文のgroup by k_id一部です。これは、mysqlに合計をk_idの値で行うように指示するため、302と303は別々に集計されます。 group by句とロールアップを削除すると、0が返されます。

関連する問題