Ruby on Rails/ActiveRecord/计算
外观
计算提供用于计算 ActiveRecord 模型中列的聚合值的方法。
所有计算都通过 calculate 方法处理。calculate 方法接受操作名称、列名和任何选项。选项可用于使用 :conditions、:order、:group、:having 和 :joins 自定义查询。
支持的计算是
- 平均值
- 总和
- 最小值
- 最大值
- 计数
calculate 方法有两种工作模式。如果 :group 选项未设置,则结果将作为单个数值返回(计数为 fixnum,平均值为 float,其他所有值则为列类型)。如果设置了 :group 选项,则结果将作为值的有序 Hash 返回,并按 :group 列对它们进行分组。:group 选项接受列名或belongs_to关联。
注意,如果计算中指定的条件导致基础表中没有返回任何值,则 calculate 方法将返回nil.
例如
values = Person.maximum(:age, :group => 'last_name') puts values["Drake"] => 43
drake = Family.find_by_last_name('Drake') values = Person.maximum(:age, :group => :family) # Person belongs_to :family puts values[drake] => 43
values.each do |family, max_age| ... end
您可以使用 average 方法计算特定列的平均值。例如
Person.average(:age)
将返回 Person 模型中所有人的平均年龄。
自定义查询的示例
Person.average(:age, :conditions => ['age >= ?', 55])
这将返回 55 岁或以上的人的平均年龄。
sum 方法将计算特定列的总和。例如
Product.sum(:number_in_stock)
将返回库存中产品的总和。
自定义查询的示例
Product.sum(:number_in_stock, :conditions => ['category_id = ?', 10])
将返回类别 10 且库存中的产品的数量之和。
minimum 方法将计算特定列的最小值。例如
Donation.minimum(:amount)
将返回捐赠的最低金额。
自定义查询的示例
Donation.minimum(:amount, :conditions => ['created_at > ?', 1.year.ago])
这将返回过去一年中捐赠的最低金额。
maximum 方法将计算特定列的最大值。例如
Donation.maximum(:amount)
将返回捐赠的最高金额。
自定义查询的示例
Donation.maximum(:amount, :conditions => ['created_at > ?', 1.year.ago])
这将返回过去一年中捐赠的最高金额。
计算满足条件的项目的数量。
TestResult.count(:all)
将返回数据库中 TestResult 对象的数量。
自定义查询的示例
TestResult.count(:all,:conditions=>['starttime>=?',Time.now-3600*24])
将返回其 starttime 字段在过去 24 小时内的 TestResult 对象的数量。