我有以下架构表:
我有三个带有关联的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
答案 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")