我试图通过将OrderItem
乘以unit_price
并减去quantity
,然后按{{line_discount
进行分组来计算每个product_id
的总价值1}}并对line_total
求和,这样我就可以得到每个产品的总行数。
我先试了这个:
OrderItem.select("order_items.*,
order_items.unit_price * order_items.quantity - order_items.line_discount AS line_total
GROUP BY product_id").sum('line_total')
但是我收到了这个错误:
PG::UndefinedColumn: ERROR: column "line_total" does not exist
LINE 1: SELECT SUM(line_total) AS sum_line_total, product_id...
^
: SELECT SUM(line_total) AS sum_line_total, product_id AS product_id FROM "order_items" GROUP BY product_id
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "line_total" does not exist
LINE 1: SELECT SUM(line_total) AS sum_line_total, product_id...
我在这里找到了一些问题,其中答案表明在子查询中包装查询的别名部分是解决方案,但我尝试了几个变体并且不断得到相同的错误。
我试过的子查询的一些变体:
OrderItem.select("order_items.*,
(SELECT order_items.unit_price * order_items.quantity - order_items.line_discount AS line_total
GROUP BY order_items.product_id)").sum('line_total')
OrderItem.select("order_items.*,
(SELECT unit_price * quantity - line_discount AS line_total
FROM order_items GROUP BY order_items.product_id)").sum('line_total')
OrderItem.select("order_items.*,
(SELECT order_items.unit_price * order_items.quantity - order_items.line_discount AS line_total)")
.group(:product_id).sum("line_total")
如何调整此查询以返回我正在寻找的结果?
答案 0 :(得分:1)
如果您愿意放弃选择所有字段(您可能不想要的话,因为您只是按product_id
进行分组),此查询将为您执行此操作:
OrderItem.group("product_id").sum("unit_price * quantity - line_discount")
结果将是一个哈希,其中键是product_ids,值是总和。