根据关联模型中的列计算 SUM
Calculate SUM based on a column from associated model
我有一个名为 vehicles
的 table,它有一个名为 vehicle_id
和 price
的列。
我有一个名为 sales
的 table,它引用了 vehicles
table。它有列 vehicle_id
(引用 vehicle
table)和 sale_status
可以等于 'sold' 或 'loan'.
我正在尝试计算 vehicles
的总价,它等于 sales
table 中的 'sold'。非常感谢您的帮助!
这是我目前拥有的,但是 returns 错误的号码。
vehicle.rb:
def self.vehicles_price_sum
vehicles_sold.sum(:price).to_f
end
def self.vehicles_sold
Vehicle.where(id: Sale.where(sale_status: 'Sold'))
end
您可以尝试使用子查询(这与您的解决方案很接近,但您需要为带有 select
的 in
子句显式提供列名,否则 sales
' id
将提供专栏):
Vehicle.where(id: Sale.where(status: "Sold").select(:vehicle_id)).sum(:price)
# SELECT SUM(`vehicles`.`price`) FROM `vehicles` WHERE `vehicles`.`id` IN (SELECT `sales`.`vehicle_id` FROM `sales` WHERE `sales`.`sale_status` = 'Sold')
我有一个名为 vehicles
的 table,它有一个名为 vehicle_id
和 price
的列。
我有一个名为 sales
的 table,它引用了 vehicles
table。它有列 vehicle_id
(引用 vehicle
table)和 sale_status
可以等于 'sold' 或 'loan'.
我正在尝试计算 vehicles
的总价,它等于 sales
table 中的 'sold'。非常感谢您的帮助!
这是我目前拥有的,但是 returns 错误的号码。
vehicle.rb:
def self.vehicles_price_sum
vehicles_sold.sum(:price).to_f
end
def self.vehicles_sold
Vehicle.where(id: Sale.where(sale_status: 'Sold'))
end
您可以尝试使用子查询(这与您的解决方案很接近,但您需要为带有 select
的 in
子句显式提供列名,否则 sales
' id
将提供专栏):
Vehicle.where(id: Sale.where(status: "Sold").select(:vehicle_id)).sum(:price)
# SELECT SUM(`vehicles`.`price`) FROM `vehicles` WHERE `vehicles`.`id` IN (SELECT `sales`.`vehicle_id` FROM `sales` WHERE `sales`.`sale_status` = 'Sold')