Я работаю над настройкой запроса PostgreSQL;для контекста, это в контроллере Rails 4;мой набор данных слишком велик, и запросы через переменные экземпляра загружаются очень долго.Фоновая работа также усложняет ситуацию, так как я не могу пропустить несколько помощников, которые необходимы для просмотра).
Вот проблема: SELECT не позволяет мне вызывать вычисленные значения, если ранее вызывался атрибут product_selection
.Это работает для products.working value
, когда я использую его для установки значений по умолчанию для других атрибутов, но не для чего-либо сложного.
SELECT warehouses.name,
categories.name,
products.name,
rfid_tags.number,
product_selections.use_time,
COUNT(product_selections.id) as times_used,
SUM(product_selections.use_time) as total_time_staged,
SUM(product_selections.use_time) / COUNT(product_selections.id) as avg_staging_time,
products.working_value as working_value,
products.working_value * 0.15 as product_rental_value,
products.working_value * 1.20 as product_purchase_value
FROM warehouses
LEFT JOIN rfid_tags
ON warehouses.id = rfid_tags.location_id AND rfid_tags.location_type = 'Warehouse'
LEFT JOIN products
ON rfid_tags.ancestor_product_id = products.id
LEFT JOIN category_assignments
ON category_assignments.product_id = products.id
LEFT JOIN categories
ON category_assignments.category_id = categories.id
LEFT JOIN product_selections
ON product_selections.product_id = products.id
GROUP BY warehouses.name,
categories.name,
products.name,
rfid_tags.number,
product_selections.use_time,
products.working_value
;
Например, когда я заменяю SUM(product_selections.use_time) as total_time_staged
на ceiling(SUM(product_selections.use_time/2629800)) as months_staged
, я получаю чистую замену:
name | name | name| number | use_time | times_used | months_staged | avg_staging_time | working_value | product_rental_value | product_purchase_value
Main Warehouse | Tables | Cedar Crest End Table| 000000000000000000006281 | 1198544 | 1 | 0 | 1198544 | 120 | 18 |
Однако, когда я добавляю его в список, я получаюпустая таблица:
name | name | name| number | use_time | times_used | total_time_staged | months_staged | avg_staging_time | working_value | product_rental_value | product_purchase_value
Items Taken Out of Service 2017 | || | | 0 | | | | |
У меня есть важное значение, которое мне нужно представить, которое вычисляет три значения, уже определенных вместе, но, вероятно, не через SELECT с такой скоростью: (products.working_value * 0.15) * (ceiling(SUM(product_selections.use_time/2629800))) / (products.working_value * 1.2) as product_roi
.Как еще можно учесть эти дополнительные значения, которые мне нужно запросить?