我有一张包含正数和负数的表。我必须使用子查询
找出正数和负数的总和答案 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
根据输入值的符号返回1
,0
或-1
。可以根据符号进行一些算术运算,将其转换为1
或0
:对于所有正值,( Sign( n ) + 1 ) / 2
为1
,否则为0
。请注意,对负值(( Sign( n ) - 1 ) / 2
)的检查将返回-1
或0
,因此取反(-
)可以避免翻转要求和的值的符号。