跨多个表的SQl查询计算

时间:2011-11-06 18:30:00

标签: mysql sql

好的,我现在有3个数据库表:

  • 用户
    • id:1,2
    • name:User1,User2
  • 公司
    • id:1,2,3
    • share_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,如果这有所不同。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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