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 物件的數量。