2013-05-02 56 views
0

是否可以對列中的第二列內容進行求和?MySQL根據第二列的內容加減總計

我要的是像第二條語句:

SELECT * FROM theTable; 

+------------+-------------+ 
|  type |  value | 
+------------+-------------+ 
| plusitive |  11  | 
+------------+-------------+ 
| negative |  7  | 
+------------+-------------+ 
| negative |  3  | 
+------------+-------------+ 

SELECT SUM_BASED_ON_WHETHER_type_IS_plusitive_OR_negative(value) FROM theTable; 

+----------------------------------------------------------------+ 
|  SUM_BASED_ON_WHETHER_type_IS_plusitive_OR_negative(value) | 
+----------------------------------------------------------------+ 
|         1        | 
+----------------------------------------------------------------+ 

所以字符串「plusitive」將意味着乘法值1和「負面」意味着增加總和之前乘以-1值。

任何人都知道該怎麼做?我知道表格佈局對於任務來說不是最佳的,但改變它不是一種選擇。 解決方案將在存儲過程中實施。

回答

4

可以使用CASE表達您的聚合函數裏面,以確定是否值是正還是負:

select 
    sum(case `type` 
     when 'plusitive' then value 
     when 'negative' then value * -1 end) Total 
from theTable; 

SQL Fiddle with Demo

+1

啊,完美。謝謝! – Martin 2013-05-02 14:25:54

+0

@Martin歡迎您! – Taryn 2013-05-02 14:27:50

+0

男人,你能告訴我如何做到這一點,如果有三種類型?在這個例子中只有兩種類型。 – klaudia 2015-03-07 14:46:41

0

你也可以使用此:

SELECT 
    COALESCE((SELECT SUM(`value`) 
       FROM theTable 
       WHERE `type` = 'plusitive' 
      ) 
      , 0) 
    - 
    COALESCE((SELECT SUM(`value`) 
       FROM theTable 
       WHERE `type` = 'negative' 
      ) 
      , 0) 
    AS Total ; 
相關問題