2017-10-10 56 views
0

我有薪水錶和屬性,僱主可以獲得額外獎金(是值)。 我想計算沒有exta獎金的僱主的總和(工資)以及工資和獎金的總和。 表屬性是Oracle SQL:如果其他屬性的值爲空時如何彙總值,以及何時彙總爲非定值然後計算百分比

id salary  extra_bonus 
--- ------- ----------- 
1 1200  yes 
2 900 
3 1300 
4 800  yes 
5 1100  yes 

我想報告類似的

sumsalary sumextrabonussalary percent 
--------- ------------------- ------- 
3100  2100     67,7% 
+0

檢出GROUP BY和聚合函數。 – jarlh

+3

你有沒有在你的結果中做你的數學?有幾件事看起來不正確(比如可能被顛倒的數字和2100應該是2200)? –

回答

0

這是一個很長一段時間,因爲我已經與Oracle合作,但我認爲,這應該工作:

SELECT 
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) As sumsalary, 
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END) AS sumextrabonussalary, 
    SUM(CASE WHEN extra_bonus = 'yes' THEN salary ELSE 0 END)/ 
    SUM(CASE WHEN extra_bonus = 'yes' THEN 0 ELSE salary END) AS percent 
FROM 
    My_Table 
+0

'NULL <>'yes''不計算爲真 - 計算爲NULL。所以你的'sumsalary'值總是爲0. – MT0

+0

如果它的值爲NULL,它只會計算爲NULL。如果它具有空字符串的值(這在OP中看起來像我),那麼它將適當地評估爲真或假。你是正確的,我應該指出,但由於OP有點不清楚。 –

+0

[Oracle將空字符串視爲NULL](https://stackoverflow.com/q/203493/1509264)。 – MT0

2
SELECT SUM(CASE when extra_bonus = 'yes' THEN NULL ELSE salary END) AS sumsalary, 
     SUM(CASE when extra_bonus = 'yes' THEN salary END) AS sumextrabonussalary, 
     SUM(CASE when extra_bonus = 'yes' THEN NULL ELSE salary END) 
    /SUM(CASE when extra_bonus = 'yes' THEN salary END) 
     * 100 AS percent 
FROM your_table; 
0

使用條件聚集和子查詢背後FROM

SELECT sumsalary, sumextrabonussalary, sumsalary/sumextrabonussalary * 100 as Percent 
FROM 
(
    SELECT SUM(CASE WHEN extra_bonus IS NULL THEN salary END) AS sumsalary, 
      SUM(CASE WHEN extra_bonus = 'yes' THEN salary END) AS sumextrabonussalary 
    FROM yourtable 
) t 
+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/156363/discussion-between-radim-baca-and-xing)。 –

+0

嗨,作品也是這個條件聚合後面FROM,Thx – user3275693

+0

@ user3275​​693好,很高興我能幫上忙。 –