Расчеты SQl-запроса по нескольким таблицам - PullRequest
1 голос
/ 06 ноября 2011

ОК, на данный момент у меня есть 3 таблицы базы данных:

  • Пользователи
    • id: 1, 2
    • имя: Пользователь1, Пользователь2
  • компании
    • id: 1, 2, 3
    • share_price: 10,00, 0,45, 5,98
  • портфели
    • user_id: 1, 1, 2
    • company_id: 1, 2, 1
    • сумма_общей доли: 200, 100, 30

Просто, чтобы вы знали, это для базовой симуляции фондового рынка. Мне нужно получить 5 лучших пользователей на основе их общих значений портфеля, которые рассчитываются следующим образом:

companies.share_price * portfolios.amount_of_shares

Учитывая, что 1 пользователь может иметь акции из нескольких компаний в своем портфеле, кажется бесполезным выделять все данные и затем просматривать их в PHP, потому что теоретически у меня может быть около 200 компаний ... Так что я Мне было интересно, можно ли написать SQL-запрос, который вычисляет стоимость акций каждой компании, а затем суммирует все эти значения, чтобы получить только одну переменную, поэтому я могу сделать ORDER BY и LIMIT 5 (получить исполнителей Top5)

РЕДАКТИРОВАТЬ: я использую CodeIgniter для этого проекта, если это имеет значение.

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011
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 голос
/ 06 ноября 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...