gpt4 book ai didi

ruby-on-rails - 使用 Postgres 在 ActiveRecord 查询中别名计算结果、分组和求和

转载 作者:行者123 更新时间:2023-11-29 13:27:41 25 4
gpt4 key购买 nike

我试图通过将 unit_price 乘以 quantity 并减去 line_discount 来计算每个 OrderItem 的总值(value),然后按 product_id 分组并对 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")

如何调整此查询以返回我要查找的结果?

最佳答案

如果您愿意放弃选择所有字段(您可能根本不想这样做,因为您只是按 product_id 分组),此查询将为您完成:

OrderItem.group("product_id").sum("unit_price * quantity - line_discount")

结果将是一个散列,其中键是 product_id,值是总和。

关于ruby-on-rails - 使用 Postgres 在 ActiveRecord 查询中别名计算结果、分组和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30747787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com