如果列号有5行,如下所示:
+----------+
| values |
+----------+
| -2 |
| -1 |
| 0 |
| 1 |
| 2 |
| 3 |
+----------+
我需要所有负值的总和以及结果集中所有正值的总和。
答案 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