2013-05-02 28 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 ; 
相关问题