Допустим, у меня есть несколько столов
orders = Arel::Table.new :orders
stores = Arel::Table.new :stores
managers = Arel::Table.new :managers
У менеджера много магазинов, а у магазина много заказов.
Однажды я хочу запросить среднюю сумму по заказам, где работает менеджер. О, я хочу сгруппировать это по магазину. Итак, чтобы быть ясным, я хочу получить среднюю сумму заказа для менеджера, для каждого из магазинов, в которых они работают.
И давайте предположим, что мы искали нашего менеджера:
manager = Manager.find(some_id)
totals = orders.where(orders[:store_id].in(manager.store_ids)).group(orders.store_id).project(orders[:total].average)
puts totals.to_sql
"SELECT AVG(`orders`.`total`) AS avg_id FROM `orders` WHERE `orders`.`store_id` IN (1, 2, 3) GROUP BY `orders`.`store_id`"
Да, это прекрасно работает. Но как я могу получить запрос для среднего из этих средних?
Что такое арел, чтобы получить этот запрос?
"SELECT AVG(avg_id) FROM (SELECT AVG(`orders`.`total`) AS avg_id FROM `orders` WHERE `orders`.`store_id` IN (1, 2, 3) GROUP BY `orders`.`store_id`) as avg_id_alias;"
Кто-нибудь знает?