自從我處理SQL以來已經有一段時間了。假設我有一個包含以下列的表格交易:公司,年份,價值。不同過濾的SQL列
我想創建總結每家公司總價值一個結果,但在一個專欄中,我想2015年和2016年等
Company | Total 2015 | Total 2016 |
聽起來很基本的,但我一直沒能圖出來。
我應該創建兩個查詢,每年一個?如果是這樣,我怎樣才能在以後加入這兩個結果?
自從我處理SQL以來已經有一段時間了。假設我有一個包含以下列的表格交易:公司,年份,價值。不同過濾的SQL列
我想創建總結每家公司總價值一個結果,但在一個專欄中,我想2015年和2016年等
Company | Total 2015 | Total 2016 |
聽起來很基本的,但我一直沒能圖出來。
我應該創建兩個查詢,每年一個?如果是這樣,我怎樣才能在以後加入這兩個結果?
下面是使用conditional aggregation
一個選項:
select company,
sum(case when year = 2015 then value end) total2015,
sum(case when year = 2016 then value end) total2016
from Transaction
group by company
這就是所謂有條件的聚集。
select
company,
sum(case when year = 2015 then value else 0 end) as sum2015,
sum(case when year = 2016 then value else 0 end) as sum2016
from transaction
group by company
order by company;
如果計算邏輯有點複雜,則將其推送到用戶定義的函數。
提示:
SELECT company, f_total(2015) total_2016, f_total(2016) total_2016;
在這裏,你只寫一個函數f_total()
是引入口一年參數。
這真的是一個糟糕的建議。 –
那麼,編寫一個聚合自定義函數也可能很複雜;-)無論如何,這個函數當然也應該把'value'作爲參數。 –
這是oracle 11g嗎? –
'條件聚合'應該可以與大多數數據庫一起工作... – sgeddes
它的工作原理,謝謝。 –