Я сделал все это в активной записи, но он не будет работать с нумерацией страниц, поэтому я хотел бы переключиться на SQL-запрос с OFFSET, чтобы я мог выполнять запросы эффективно. - Вместо того, чтобы получать User.all, затем обрабатывать вычисления для связанных объектов, а затем компилировать все это в связанный массив и, наконец, отправлять его в представление, которое я хотел бы обработать с помощью команды find_by_sql, чтобы им было легче управлять нумерация страниц и т. д.
Попытка вычислить общую сумму инвестированных пользователей + их остаточные непроизведенные суммы в моем маленьком симуляторе фондового рынка, с которым я играю.
Иметь таблицу цен акций, в которой есть несколько записей для каждой новой цены акций для каждой компании, поэтому необходимо:
- а) выберите последнюю запись из этой таблицы, чтобы получить последнюю долю
цена
- б) владения показывают, что пользователям из таблицы пользователей принадлежит, что
акции компании
- в) Так что, если мы умножим акции, принадлежащие владельцам
Таблица с последней ценой акции из а), то мы получаем общее
инвестированная сумма
- d) Как только мы инвестируем общую сумму во все
компании, мы должны добавить на какие неинвестированные доллары пользователь имеет
связанные с ними, так что всего инвестировано + долл. США должны дать нам
общая оценка для данного пользователя.
- e) что меня обескураживает, так это то, что пользователь может не иметь ничего в определенный момент времени, что означает, что у него не будет записей в таблице владения. В этом случае запрос должен вернуть только сумму неинвестированных долларов США.
Попытка получить общую оценку для каждого клиента и заказа «самым богатым» пользователем:
select u.id,
sum(
((
select s.price from shareprices s
WHERE s.company_id = o.company_id and u.id = o.user_id
ORDER BY id DESC LIMIT 1) * o.shares_owned
))
+ u.dollars as totalAmount
from users as u full outer join ownerships as o on u.id = o.user_id group by u.id order by totalamount ASC
Это прекрасно подходит для тех случаев, когда есть владельцы и расчеты для всей вложенной работы, но для пользователей, у которых есть только неинвестированные доллары, как я могу заставить их отображать в этом суммированном столбце, так что, по сути, его 0 (т.е. нет собственных инвестиций суммы, потому что они владеют акциями ни в одной компании) + u.dollars, чтобы получить, сколько у них есть, но я не понимаю, как заставить SQL делать это.
Я надеюсь избежать необходимости использования функции pgsql () для достижения этой логики, но если вышеприведенное не делает это очевидным, я ужасен в SQL и изучаю его только сейчас. Надеюсь, мое объяснение даже понятно!