2013-12-11 110 views
1

我有一個具有以下信息的表格股票的平均價值:SQL:獲取每個基金

_______________________________________________________ 
| fundName | stockName | numShares | price | 
_______________________________________________________ 
| Sunshine |  Enron  |  10  | $5 | 
| Sunshine |  Lehman |  40  | $10 | 
| Brightsky | BearStearns |  20  | $3 | 
| Pillar |  GM  |  100  | $30 | 
| Pillar | Chrysler |  80  | $22 | 
| Pillar | Bricklin |  200  | $2 | 

我需要編寫一個查詢,將返回一個包含所有我的資金在名稱的表一列,以及基金股票的平均股票價值。平均數應該加權,即如果某一基金中有A股80股和B股20股,平均股票價值應該由公司A加權80%。

例如,對於上表,我想獲得的結果:

___________________________________ 
| fundName | avgSharePrice | 
___________________________________ 
| Sunshine |   $9  | 
| Brightsky |   $3  | 
| Pillar |  $13.58  | 
+0

你試過/寫過什麼來獲得你所尋求的答案?得告訴你至少已經嘗試過,否則人們會認爲你想讓別人爲你做功課。 :P – MattD

+1

@MattD你是對的,我應該有,但我的疑問是如此混亂,不值得深入瞭解。 – CodyBugstein

回答

2

試試這個:

SELECT fundName, sum(numShares * price)/sum(numShares) AS avgSharePrice 
FROM table GROUP BY fundName; 
+0

太棒了,它的工作原理!我沒有想到它能夠工作,因爲它同時處理了許多不同的行和列 - 例如,它將來自同一行的numShares和price相乘,然後還將numShares加起來整個表爲相同的'fundName'的項目。我沒有意識到SQL可以做這種需要「訂單」的事情。 無論如何,非常感謝! – CodyBugstein

+0

@Imray SQL基於集合論和邏輯,你可以看看[這裏](http://books.google.com/books?id=2hM3-xxZC-8C&printsec=frontcover&dq=Applied+Mathematics+for+數據庫+專業人員&hl = en&sa = X&ei = xaSoUo7HKoTAtQbpioG4Bg&ved = 0CEcQ6AEwAA#v = onepage&q = Applied%20Mathematics%20for%20Database%20Professionals&f = false) –

3
select fundName , sum(numShares * price)/sum (numShares) avgSharePrice 
from stock_info 
group by fundName 

sqlfiddle demo

+0

謝謝Mohsen!我首先接受了第一個答案,但我也非常感謝你。 Khoda hofez!並請告訴你的領導人不要製造核武器。 – CodyBugstein

+1

親愛的@Imray感謝您的評論。我們每天都在努力達到目標。事情在這裏變得更加複雜。 'Shad Bashid' –