2011-11-06 258 views
1

OK,我目前所面對的3個數據庫表:SQL查詢計算

  • 用戶
    • ID:1,2
    • 名:用戶1,用戶2
  • 公司
    • id:1,2,3
    • shar e_price:10.00,0.45,5.98
  • 組合
    • USER_ID:1,1,2
    • COMPANY_ID:1,2,1
    • amount_of_shares:200,100,30

大家知道,這是基本的股市模擬。我需要根據其總投資組合價值,這是因爲這樣的計算,以獲得前5名的用戶:

companies.share_price * portfolios.amount_of_shares

牢記1個用戶可以從多個公司在他的投資組合有股票,這似乎是一個浪費來選擇所有的數據,然後在PHP中循環,因爲理論上我可能有大約200家公司......所以我想知道是否可以編寫一個SQL查詢來計算每個公司擁有的股票的價值,然後總結這些值只能生成一個變量,所以我可以執行ORDER BY和LIMIT 5(獲得Top5的執行者)

編輯:我使用CodeIgniter來編寫這個項目噸,如果這有所作爲。

回答

3
SELECT *, SUM(amount_of_shares*c.share_price) as total FROM `portfolios` 
LEFT JOIN companies c ON c.id = portfolios.company_id 
GROUP BY `user_id` 
ORDER BY total DESC 
LIMIT 5 
+0

完美!非常感謝你。 –

1
select u.name, sum(c.share_price * p.amount_of_shares) as total 
from portfolios p 
inner join companies c on p.company_id = c.id 
inner join users u on p.user_id = u.id 
group by u.name 
order by total desc 
LIMIT 5