Schienen: müssen in der GROUP BY-Klausel oder eine Aggregatfunktion
Ich bin auf Bate ' s tut auf graphs & charts, aber erhalte eine Fehlermeldung.
Dies ist der Fehler, ich bin immer
PG::Error: ERROR: column "orders.created_at" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT created_at, sum(amount) as total_amount FROM "orders"...
^
: SELECT created_at, sum(amount) as total_amount FROM "orders" WHERE ("orders"."created_at" BETW
- Und dies ist der code, den ich verwende in meinen Bestellungen Modell
def self.total_grouped_by_day(start)
orders = where(created_at: start.beginning_of_day..Time.zone.now)#.all
orders = orders.group("date(created_at)")
orders = orders.select("date(created_at), sum(amount) as total_amount")
orders.group_by { |order| order.created_at.to_date }
end
und in mein Helfer
def orders_chart_data
orders_by_day = Order.total_grouped_by_day(3.weeks.ago)
(3.weeks.ago.to_date..Date.today).map do |date|
{
created_at: date,
price: orders_by_day[date].first.try(:total_amount) || 0
}
end
end
Ich bin mit Postgres (die ich bin mir ziemlich sicher, dass ist der wichtigste Grund, warum ich diese Fehlermeldung bekommen) & Rails 3.x.x.
Warum ist dieser Fehler aufgetreten & wie kann ich es beheben?
Danke im Voraus
In meiner Konsole:
Order.where(created_at: 3.weeks.ago.beginning_of_day..Time.zone.now).group("date(created_at)").select("date(created_at), sum(amount) as total_amount")
& das ist, was ich bekommen
[#<Order >, #<Order >, #<Order >]
komisch..
läuft das in meiner console: Order.where(created_at: 3.weeks.ago.beginning_of_day..Time.zone.now).group("date(created_at)").select("date(created_at), sum(amount) as total_amount").first.total_amount
gibt mir diese:
Creating scope :page. Overwriting existing method Order.page.
Order Load (18.1ms) SELECT date(created_at), sum(amount) as total_amount FROM "orders" WHERE ("orders"."created_at" BETWEEN '2013-07-05 00:00:00.000000' AND '2013-07-26 23:50:38.876609') GROUP BY date(created_at) LIMIT 1
=> "10.0"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie gruppieren
date(created_at)
aber nicht auswählen, die Spalte. Ändern Sie diese Zeile:zu diesem:
Wird auch eine änderung der nächsten Zeile ist group_by als gut.
Aus einem meiner Projekte, mit leicht unterschiedlichen Parametern, aber das gleiche tun wie du:
missing attribute: created_at
orders.group_by { |order| order.date(created_at).to_date }
Recht? Ich bin mir nicht sicher, denn nachdem ich, dass, ich bekommeundefined local variable or method
created_at' für # "< " Class...`undefined method 'first' for nil:NilClass
Fehler in meiner Helfer (siehe Frage)Einem Abdruck Datum einfachsten & fastest. Hier die raw-SQL, da bin ich kein Experte in Ruby-syntax (und kein fan von ORMs Schlachten SQL im Allgemeinen).