好的,我现在有3个数据库表:
您知道,这是基本的股市模拟。我需要根据他们的总投资组合价值获得前5名用户,这些用户计算如下:
companies.share_price * portfolios.amount_of_shares
请记住,1个用户可以从他的投资组合中的多个公司获得股票,选择所有数据然后在PHP中循环它似乎是浪费,因为理论上我可能有大约200家公司......所以我我想知道是否有可能编写一个SQL查询来计算每个公司所拥有的股票的价值,然后将所有这些值加起来只产生一个变量,所以我可以做ORDER BY和LIMIT 5(获得Top5表演者)
编辑:我正在为这个项目使用CodeIgniter,如果这有所不同。
答案 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