当我在SQLite中尝试时,此查询有效:
Transaction.where(:paid => true).select("created_at, SUM(amount) amount").group("DATE(created_at)").order('created_at')
但是当我使用postgreSQL运行它时,它确实没有用。 下面是错误信息:
ActiveRecord::StatementInvalid: PGError: ERROR: column "transactions.created_at" must appear in the GROUP BY clause or be used in an aggregate function : SELECT created_at, SUM(amount) as amount FROM "transactions" WHERE ("transactions"."paid" = 't') GROUP BY DATE(created_at) ORDER BY created_at
任何可以帮助我的人?
提前致谢
答案 0 :(得分:1)
您必须在select子句中使用DATE(created_at)
,或在group by子句中使用created_at
。
答案 1 :(得分:1)
您选择created_at, sum(amount)
,按created_at
排序,但按date(created_at)
进行分组。除了join / where子句之外,后者将禁止使用除字段和聚合之外的任何内容。
要修复,请按created_at
分组,或按date(created_at)
而不是created_at
选择和顺序。