按子模型属性的乘积之和进行分组

时间:2015-12-16 12:49:04

标签: mysql ruby-on-rails scope

Document has_many :items

Item belongs_to :document

我需要查找文件,其中items.quantity * items.value_net的产品总和大于特定值。

我尝试了范围:

scope :items_value_net_gteq, lambda { |value|
  joins(:items)
    .where('SUM(items.quantity * items.price_net) >= ?', value)
}

但这是错误的。我一定错过了一些明显的东西。

2 个答案:

答案 0 :(得分:2)

您正在寻找having(未经测试):

scope :items_value_net_gteq, ->(value) {
  joins(:items).group('documents.id').
    having('SUM(items.quantity * items.price_net) >= ?', value)
}

答案 1 :(得分:2)

scope :items_value_net_gteq, lambda do |value|
  joins(:items).group("items.document_id")
         .having('SUM(items.quantity * items.price_net) >= ?', value)
end