【发布时间】:2011-01-02 14:25:11
【问题描述】:
我知道我以前见过这个,但我现在找不到任何东西。我想按某个列对查询进行分组,并能够显示每组中有多少个。我把第一部分记下来了:
@line_items = @project.line_items.all(:group => "device_id")
这是我的订单项索引视图,它只是一个显示订单项的表格。既然订单项按设备分组,如何在该表中为“计数”创建一列?
【问题讨论】:
标签: ruby-on-rails count
我知道我以前见过这个,但我现在找不到任何东西。我想按某个列对查询进行分组,并能够显示每组中有多少个。我把第一部分记下来了:
@line_items = @project.line_items.all(:group => "device_id")
这是我的订单项索引视图,它只是一个显示订单项的表格。既然订单项按设备分组,如何在该表中为“计数”创建一列?
【问题讨论】:
标签: ruby-on-rails count
devise_id 的散列作为键和相关记录计数
@project.line_items.group(:device_id).count
【讨论】:
我想你也可以试试这个。
@project.line_items.group(:device_id).pluck("device_id, count(device_id)")
^^ 这给出了包含元素 'device_id 和 count' 的数组数组
【讨论】:
仅计数 pluck 会比 group
更快@project.line_items.pluck(:device_id).count
@project.line_items.pluck(:device_id).uniq.count
【讨论】:
customer_subscriptions.group(:status).count 将返回:{1 => 6, 2 => 11, 3 => 136, 0 => 30} 和 customer_subscriptions.pluck(:status).count 将只返回 183
您可以在line_items 上执行count,这将返回一个有序的device_id 和count 散列。
@project.line_items.group(:device_id).count
【讨论】:
DEPRECATION WARNING: Relation#calculate with finder options is deprecated. Please build a scope and then call calculate on it instead. (called from C:in 'count':)
@project.line_items.group(:device_id).count
这次提交之后:
https://github.com/rails/rails/commit/a1c05dd8b9bd3623289d3aa73dda2943d620cc34
有一种新方法可以做同样的事情:
@project.line_items.count(:group => LineItem.arel_table[:device_id])
【讨论】:
类似
User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
也许也可以……
【讨论】:
只需添加一个:select 选项:
@line_items = @project.line_items.all(
:group => "device_id",
:select => "device_id, COUNT(*) as count"
)
那么每个@line_item 都会有一个count 属性。
【讨论】: