2016-04-21 48 views
2

是否可以在相同的SQL Select Query(无函数/过程或PL/SQL)上计算两个聚合函数的代数运算?在单列上:对聚合函数的代数运算

| id || A | 
|-----||-----| 
| 1 || 10 | 
| 2 || 20 | 
| 3 || 30 | 
| 4 || 40 | 


SELECT (SELECT SUM(A) FROM Table Where 'id is even') - (SELECT SUM(A) FROM Table Where 'id is odd') 
FROM TABLE 
WHERE 'condition' 

任何想法?

PS:我是DATABSE的Oracle 11g

+0

什么是您的数据库? –

+0

@JorgeCampos Oracle 11g –

+0

回答您的问题。 –

回答

4

你可以做到这一点,因为这:

select sum(case when mod(id,2)=0 then A else 0 end) - 
     sum(case when mod(id,2)=0 then 0 else a end) 
    from test 
where yourCondition 

的SQLFiddle是一个MySQL的样品,因为甲骨文也有mod功能它应该工作原样。

看到它在这里工作:http://sqlfiddle.com/#!9/1ba756/2

+0

对不起,我正在使用Oracle 11g。我正在寻找更一般的SQL答案。顺便说一句,我用even/odd作为例子。这里的困难是找到我的“yourCondition”。任何想法呢? –

+3

@KurtMiller - “更一般”是什么意思?这种方法有什么问题?你可以用你喜欢的任何测试来替换MOD呼叫。或者你的意思是你需要它是动态的,例如'条件'是来自另一个表的值?如果是这样,你真的需要在你的问题中解释。 –

+0

@KurtMiller我同意在@AlexPoole你必须解释更好的你的问题。现在,它完美地回答它。 Sum函数中的'case'是条件奇怪,甚至你要求。正如你所问,它也只是一个SQL命令。 –