Ruby on Rails如何处理“按类别从产品组中选择计数(*)”?

时间:2010-08-24 15:55:23

标签: mysql ruby-on-rails aggregate

说是否有一个包含字段的表

Products
--------
ID
CategoryID
Name
Price
  ... etc

Ruby on Rails如何提供一个返回

的表
select count(*) from products group by categoryID

这是显示每个类别中有多少产品?结果如何,而不是Products.find(:all)是一个Product对象数组?

作为更高级的操作,怎么样

select count(*) from products p inner join category c on p.categoryID = c.ID 
  group by categoryID

select average(price) from products p inner join category c on p.categoryID = c.ID 
  group by categoryID

2 个答案:

答案 0 :(得分:7)

您可能想要查看ActiveRecord::Calculations模块(我相信它会解决您提出的大部分问题):

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html

一些例子:

<强>计数:

Product.group(:category_id).count

<强>平均:

Product.joins(:category).group(:category_id).average(:price)

那些应该有希望让你走上正确的道路。但是,请查看链接的文档,因为它非常有用。

答案 1 :(得分:2)

您是在询问幕后发生的事情,也不知道结果会是什么样子。如果是后者,那么学会爱控制台!您可以轻松找到自己:

$ script/console
Loading development environment (Rails 2.3.8)

>> Product.count
=> 229697

>> Product.count(:group => :category_id)
=> #<OrderedHash {27=>5588, 33=>41, 28=>156, 34=>22, 23=>15209, 1=>115357, 
     29=>109, 24=>68, 2=>14434, 25=>78576, 31=>85, 26=>4, 32=>48}>

正如您所看到的,它为您提供了有序哈希映射category_ids到这些类别的计数。