2 Stimmen

Generierung einer Unterabfrage mit Arel, um einen Durchschnitt von Durchschnittswerten zu erhalten

Nehmen wir an, ich habe ein paar Tabellen

orders = Arel::Table.new :orders
stores = Arel::Table.new :stores
managers = Arel::Table.new :managers

Und ein Manager hat viele Filialen und eine Filiale hat viele Aufträge.

Eines Tages möchte ich die durchschnittliche Gesamtsumme aller Aufträge abfragen, in denen ein Manager arbeitet. Oh, ich möchte das nach der Filiale gruppieren. Um das klarzustellen, möchte ich die durchschnittliche Auftragssumme für einen Manager für jede der Filialen abfragen, in denen er arbeitet.

Und nehmen wir an, wir haben unseren Manager besucht:

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`"

Ja, das funktioniert hervorragend. Aber wie kann ich eine Abfrage für den Durchschnitt dieser Durchschnittswerte erhalten?

Wie lautet das Arel, um diese Abfrage zu erhalten?

"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;"

Weiß das jemand?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X