MySQL根据第二列的内容添加和减去总和

时间:2013-05-02 14:18:42

标签: mysql sql

是否可以对考虑第二列内容的列进行求和?

我想要的是第二个陈述:

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的值,'negative'表示在加到sum之前乘以-1的乘法值。

任何人都知道该怎么做?我知道表格布局不是最佳的任务,但改变它不是一个选项。 解决方案将在存储过程中实现。

2 个答案:

答案 0 :(得分:5)

您可以在聚合函数中使用CASE表达式来确定值是正数还是负数:

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

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

你也可以使用它:

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