2015-04-03 36 views
0

你好,我正在計算根據校園地點的學生的某些小時的百分比..所以我將他們學期的總小時數並試圖將它除以僅從該校園中獲得的小時數想出一個大概比例的主校園。SQL的總和部門

例如,如果他們班的80%發生在校園A,那麼我可以使用它。我改變了表名,因爲他們是明顯的原因

這是我一直在嘗試,似乎無法使其工作。任何提示/建議

select "credits_sum"/"div_hours" 
from table1 
where credits_sum = (select sum(credit_hr) 
      from table1 
      where table1_term_code = 201480 
      and table1_rsts_code not like 'D%' 
      and table1_id = 1234) 

and div_hours = (select sum (credit_hr) 
       from table1 
       where table1_id = 1234 
       and table1_TERM_CODE = 201480 
       and table1_RSTS_CODE not like 'D%' 
       and table1_RSTS_CODE not like 'W%' 
       and table1_CAMP_CODE = 'PPE' 
       and table1_CREDIT_HR > 0 
       group by table1_id); 
+0

請出示樣品表中的數據。 – OldProgrammer 2015-04-03 20:12:25

+1

我認爲SQL的分析功能可以更有效地解決工作。 – PhillipD 2015-04-03 20:25:59

+0

'所以我把這個學期的總小時數,並試圖把它只從校園裏拿出來的時間除以得到一個大概的比例的主校園。「 - 你有你的分子和分母混在一起。在校園中獲得一定的時間比例應該是校園時間/總小時數。 – 2015-04-04 12:45:32

回答

1

你會想要使用CASE語句來關閉它。你現在在做什麼,你的WHERE條款只是限制整個記錄基於其他選擇的總和......並沒有任何意義。

我懷疑你想要的東西是一樣的東西:

SELECT 
    SUM(CASE WHEN table1_term_code = 201480 
      and table1_rsts_code not like 'D%' 
      and table1_id = 1234 THEN credit_hr END) 
     /
    SUM(CASE WHEN table1_id = 1234 
       and table1_TERM_CODE = 201480 
       and table1_RSTS_CODE not like 'D%' 
       and table1_RSTS_CODE not like 'W%' 
       and table1_CAMP_CODE = 'PPE' 
       and table1_CREDIT_HR > 0 THEN credit_hr END) AS divisionField 
from table1 
+0

這個作品很棒,David Faber在我上面的評論中確實意識到我把錯誤的分子和分母移到了錯誤的地方,但是這段代碼工作正常!謝謝 – 2015-04-06 14:35:30