如何在列中单独找到正值和负值的总和

时间:2016-11-23 10:33:05

标签: sql teradata

如果列号有5行,如下所示:

+----------+
|  values  |
+----------+
|   -2     |
|   -1     |
|    0     |
|    1     |
|    2     |
|    3     |
+----------+

我需要所有负值的总和以及结果集中所有正值的总和。

5 个答案:

答案 0 :(得分:2)

问题背景尚不清楚。因此,我假设这是关于存储在RDBMS表中的数据。我还假设您希望使用SQL语言来获得结果。

假设表格为DATA_TABLE,我们感兴趣的列名称为VALUE,则查询应如下所示

SELECT 
    SUM(CASE WHEN VALUE > 0 THEN VALUE ELSE 0 END) POSITIVE_BALANCE,
    SUM(CASE WHEN VALUE < 0 THEN VALUE ELSE 0) NEGATIVE_BALANCE 
FROM DATA_TABLE;

如果假设不正确,请编辑您的问题,包括更多详细信息,问题背景以及您要解决的编程环境。

答案 1 :(得分:1)

使用CASE表达式:

SELECT SUM(CASE WHEN col > 0 THEN col ELSE 0 END) AS posSum,
       SUM(CASE WHEN col < 0 THEN col ELSE 0 END) AS negSum
FROM yourTable

答案 2 :(得分:1)

我想你需要将两个查询组合在一起:

SELECT (SELECT SUM(col) FROM my_table WHERE col > 0) as positive_val, 
(SELECT SUM(col) FROM my_table WHERE col < 0) as negative_val

答案 3 :(得分:1)

您可以尝试以下类似的简单操作:

SLEECT * FROM
(SELECT SUM (VALUE) POS_SUM FROM TABLE WHERE VALUE > 0) A
JOIN 
(SELECT SUM (VALUE) NEG_SUM FROM TABLE WHERE VALUE < 0) B
ON 1 = 1;

维杰基马尔的解决方案也可以使用。

答案 4 :(得分:0)

SELECT SUM(values) FROM yourTable WHERE value <> 0 GROUP BY SIGN(values) 

编辑:

SQL> SELECT * FROM NUMBER_DATA WHERE value <> 0;

     VALUE
----------
         2
        -3
         4
         5
        -9
         1
         5
         7
        -8
        10
SQL> SELECT SIGN(VALUE), SUM(VALUE) FROM NUMBER_DATA WHERE value <> 0 GROUP BY SIGN(VALUE);

SIGN(VALUE) SUM(VALUE)
----------- ----------
          1         34
         -1        -20