2011-11-06 147 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