如何对一列求和,将另一列的值相乘并返回对象活动记录



我正在尝试找到最畅销的商品。项目具有idprice。它has_many ItemOrders,它belongs_to Item 并具有item_id 。我试过了...

Item.select('items.*, COUNT(item_orders.item_id) AS item_count')
.joins(:item_orders)
.group('items.id')
.order('SUM(item_count * items.price) DESC')

我并没有真正看到断开连接的地方。我以前做过类似的事情要快得多。我得到的只是关系对象。我正在尝试获取 Item 对象的数组。

编辑如果我去掉乘法,它会返回 Items 数组,但我认为这不是最重要的项目,因为它只是使用该 id 的连接上的记录计数。

认为我已经知道了。我像往常一样过度思考这是否正确,哈哈。

def self.top_items(quantity=nil)
    Item.select('items.*, sum(item_orders.item_id * items.price) as sum')
      .joins(:item_orders)
      .group(:id)
      .order("sum desc")
      .limit(quantity)
  end

在乘以items.price之前,我可能不需要计算item_orders.item_id

最新更新