0

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

我想要的是第二个陈述:

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”表示将值与 -1 相乘,然后再相加。

有人知道该怎么做吗?我知道表格布局对于任务来说不是最佳的,但改变它不是一种选择。解决方案将在存储过程中实现。

4

2 回答 2

6

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

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

请参阅带有演示的 SQL Fiddle

于 2013-05-02T14:22:32.793 回答
0

你也可以使用这个:

SELECT 
    COALESCE( ( SELECT SUM(`value`)
                FROM theTable
                WHERE `type` = 'plusitive'
              )
            , 0)
    - 
    COALESCE( ( SELECT SUM(`value`)
                FROM theTable
                WHERE `type` = 'negative'
              )
            , 0)
    AS Total ;
于 2013-05-02T15:55:09.947 回答