我用这个方法:轨道/ Postgres的:“必须出现在GROUP BY子句或聚合函数中使用”
def self.lines_price_report(n)
Income.group('date(filled_at)').having("date(filled_at) > ?", Date.today - n).sum(:lines_price)
end
我得到这个错误的Heroku:
PG::Error: ERROR: column "incomes.filled_at" must appear in the GROUP BY clause
or be used in an aggregate function
我该如何解决这个问题?谢谢。
执行的查询:
SELECT SUM("incomes"."lines_price") AS sum_lines_price, date(filled_at)
AS date_filled_at FROM "incomes"
HAVING (date(filled_at) > '2012-12-04')
GROUP BY date(filled_at) ORDER BY filled_at ASC
预期结果
[["2012-12-04", SUM_FOR_DATE], ["2012-12-05", SUM_FOR_DATE], ...]
'reorder'可以用来覆盖默认排序。 'unscoped'将放弃所有默认范围,这可能是不希望的。使用'where'而不是'having'是个好主意。 – khustochka
@khustochka如果您有多个默认范围,我同意'reorder'而不是'unsocped'。我改变了答案。 – sufleR
谢谢你的作品。为什么在哪里比拥有更好?我如何在filled_at上创建一个索引? – Alex