2016-04-21 78 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命令。 –