2014-01-30 80 views
0

這是基於以前的文章中一個單獨的問題的結果分爲:如何通過另一個查詢

[鏈接] How to calculate Grand Totals when using OVER (partition by ...) using Oracle SQL

我使用以下Oracle SQL查詢:

SELECT JOB_GROUP, 
    SUM(PEOPLE) AS CURRENT_PEOPLE 
    SUM(PEOPLE)/'100' AS RATIO 
FROM MY_VIEW 
WHERE MONTH = '01-DEC-2013' 
GROUP BY ROLLUP (OB_GROUP) 
ORDER BY RATIO DESC; 

此查詢爲我提供了這樣的輸出..

JOB_GROUP CURRENT_PEOPLE RATIO 
WORKER1  100    1.0 
WORKER2  30     .3 
WORKER3  40     .4 
WORKER4  25     .25 
WORKER5  30     .30 
(NULL)  225    2.25 

我需要能夠div將所有比率的總和代入job_group ='WORKER1',WORKER2,WORKER4的比率之和。例如,我們可以有5個不同的job_groups,但我只需要1,2和4比例的總和。我懷疑這是某種類型的子查詢,但尚未能得到正確的結果。

該公式看起來像總和(比率)/總和(比率)其中工人,1,2,4。 2.25 /(1.0 + 0.3 + 0.25)= 0.80

感謝您的幫助,您可以提供,

+3

請提供樣本數據和期望的結果。 –

+0

將這些表格添加到這些框中的祕訣是什麼?我看過高級幫助,找不到它。我認爲你或者以前編輯過的人並且很好地組織了它;)感謝你的幫助。 – Ewaver

+0

。 。這裏有一個參考。 。 。 http://stackoverflow.com/editing-help。一般來說,如果您在一行的開頭放置四個空格,則會在陰影區域中獲得固定寬度的字體,對於代碼和表格都很適合。 –

回答

0

下使用的解析函數來獲得worker1s數量:

select JOB_GROUP, CURRENT_PEOPLE, 
     CURRENT_PEOPLE/sum(job_group = 'WORKER1' then CURRENT_PEOPLE end) over() as Ratio 
from (SELECT JOB_GROUP, 
      SUM(PEOPLE) AS CURRENT_PEOPLE 
     FROM my_view 
     WHERE MONTH = '01-DEC-2013' 
     GROUP BY ROLLUP (JOB_GROUP) 
    ) t 
ORDER BY RATIO DESC; 
+0

這實際上給了我與上面相同的結果。如果我用僞代碼表示查詢,聽起來像這樣..總比例除以工作人員1,2和4的比率之和。我懷疑這可以通過使用複雜的子查詢來實現。 – Ewaver

+0

我正在玩你提供的這個查詢,並且注意到如果我通過job_group將其更改爲group,並添加job_group ='WORKER1'的地方,那麼我得到1,而不管你爲這個''添加哪個工作者。 – Ewaver

+1

我創建了一個子查詢。將分析功能與聚合相結合可能會造成混淆。 –