ActiveRecord 中按created_at 对记录进行分组

Are*_*rel 1 postgresql activerecord group-by ruby-on-rails rails-activerecord

我试图找出某一天创建了多少条记录,以获得如下结果:

User uploaded 5 objects two days ago

User uploaded 12 objects 21 days ago

我试过了:

Flight.group("created_at::date")
Run Code Online (Sandbox Code Playgroud)

但出现错误:

ActiveRecord::StatementInvalid: PG::GroupingError: ERROR:  column "flights.id" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将任一直接添加id到组字段或添加另一个时,.group我最终都会对 和 进行分组idcreated_at这显然不会对任何内容进行分组,因为每个匹配项只有一个实例。

我在这里缺少什么?

mu *_*ort 5

如果你想数数,那就数一下:

Flight.group('created_at::date').count         # PostgreSQL-only
Flight.group('date(created_at)').count         # PostgreSQL and AFAIK MySQL
Flight.group('cast(created_at as date)').count # Standard SQL
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个以日期为键、计数为值的哈希值。否则,数据库将不知道应使用组中行中的哪些值来表示该组。如果您添加count聚合函数,那么歧义就消失了,数据库知道您想要它做什么。