SQL - 使用子查询的正数和负数之和

时间:2013-12-12 12:19:41

标签: sql

我有一张包含正数和负数的表。我必须使用子查询

找出正数和负数的总和

6 个答案:

答案 0 :(得分:11)

您的问题不是很明确(没有给出表格或列名称),也不清楚为什么需要子查询(如果可以避免的话,从来不是一个好主意)。您可以使用“case”语句

获取所需的值

以下计算正值和负值的数量

select sum (case when acolumn >= 0 then 1 else 0 end) as positive,
       sum (case when acolumn < 0 then 1 else 0 end) as negative
from table

而以下总和正值和负值的数量

select sum (case when acolumn >= 0 then acolumn else 0 end) as positive,
       sum (case when acolumn < 0 then  acolumn else 0 end) as negative
from table

答案 1 :(得分:5)

对于否定的总和:

SELECT SUM(numberColumn) FROM tableFoo WHERE numberColumn < 0

对于积极的总和:

SELECT SUM(numberColumn) FROM tableFoo WHERE numberColumn >= 0

将两者结合起来(QUERY1和QUERY2是前两个查询):

SELECT (QUERY1), (QUERY2)

答案 2 :(得分:1)

select sum(case when a>=0 then a else 0 end) as positive,
sum(case when a<0 then a else 0 end) as negative
from a

答案 3 :(得分:0)

通过使用CTE(公用表表达式),我们可以得到输出。

payment

答案 4 :(得分:0)

ent

答案 5 :(得分:0)

您可以使用sign来分隔值:

select Sum( ( Sign( n ) + 1 ) / 2 * n ) as PositiveSum,
  Sum( -( Sign( n ) - 1 ) / 2 * n ) as NegativeSum
  from YourTableOData;

Sign根据输入值的符号返回10-1。可以根据符号进行一些算术运算,将其转换为10:对于所有正值,( Sign( n ) + 1 ) / 21,否则为0。请注意,对负值(( Sign( n ) - 1 ) / 2)的检查将返回-10,因此取反(-)可以避免翻转要求和的值的符号。