【问题标题】:how to sum one column, multiply value of another and return object activerecord如何对一列求和,将另一列的值相乘并返回对象 activerecord
【发布时间】:2017-10-27 03:35:53
【问题描述】:

我正在努力寻找最畅销的商品。一个项目有一个idprice。它has_manyItemOrders,其中belongs_toItem 并有一个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 对象的数组。

编辑 如果我取出乘法,它会返回项目数组,但我不认为这是最重要的项目,因为它只是具有该 ID 的连接上的记录数。

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord rails-activerecord


    【解决方案1】:

    我想我明白了。如果这是对的,我还是像往常一样想了很多,哈哈。

    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

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 2023-03-25
      • 2020-01-08
      • 1970-01-01
      • 2017-04-20
      • 2021-07-25
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多