恢复产品查询

时间:2014-07-17 16:56:52

标签: sql ruby-on-rails ruby postgresql

我有以下架构表:

enter image description here

我有三个带有关联的activerecord模型。我正在努力解决一个查询,它会显示每个产品的以下信息: 产品名称,总金额,销售总额

还应该考虑product_line与之关联的订单的状态,它应该等于“成功”。

我还想要第二个查询,它将显示上述内容,但它将根据月份进行限制(基于orders.created_at列)。例如,如果我想要1月份此产品的销售额。 产品名称,到目前为止的总金额,数量总计,月份

我设法创建了一些东西,但我认为它没有得到很好的优化,我使用了ruby的group_by,它在视图上做了很多额外的查询。我很感激您通常会开始考虑创建这样的查询。

更新

我想我几乎设法解决了第一个查询,它是以下内容:

products = Product.joins(:product_lines).select("products.name, SUM(product_lines.quantity) as sum_amount, SUM(product_lines.quantity*products.price) as money_total"),group("products.id")

我试图分别拆分每一列,并找出如何计算它。我没有考虑订单状态。

协会如下:

ProbudtLine

class ProductLine < ActiveRecord::Base
  belongs_to :order
  belongs_to :cart
  belongs_to :product
end

产品

class Product < ActiveRecord::Base
  has_many :product_lines
end

顺序

class Order < ActiveRecord::Base
  has_many    :product_lines, dependent: :destroy
end

1 个答案:

答案 0 :(得分:0)

我终于做到了。

首次查询

@best_products_so_far = Product.joins(product_lines: :order)
                                          .select("products.*, SUM(product_lines.quantity) as amount_total, SUM(product_lines.quantity*products.price) as money_total")
                                          .where("orders.status = 'successful'")
                                          .group("products.id")

第二次查询

@best_products_this_month = Product.joins(product_lines: :order)
                                          .select("products.*, SUM(product_lines.quantity) as amount_total, SUM(product_lines.quantity*products.price) as money_total")
                                          .where("orders.status = 'successful'")
                                          .where("extract(month from orders.completed_at) = ?", Date.today.strftime("%m"))
                                          .group("products.id")