Многократный запрос атрибута для расчетов в базе данных PostgreSQL (Rails 4.2) - PullRequest
0 голосов
/ 18 декабря 2018

Я работаю над настройкой запроса 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.Как еще можно учесть эти дополнительные значения, которые мне нужно запросить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...