在activerecord中选择分组行的总和

use*_*963 5 sql activerecord ruby-on-rails

无法将SQL查询转换为ActiveRecord.这是我的域建模的简化版本:

用户#has_many:篮子

篮子#date:date,user_id:integer - 有很多:line_items,belongs_to:user

LineItem#quantity:integer - belongs_to:basket

我可以在SQL中执行以下查询:

SELECT baskets.date, SUM(line_items.quantity) from baskets
INNER JOIN line_items ON line_items.basket_id = basket.id
WHERE baskets.user_id = 2
GROUP BY baskets.id
ORDER BY baskets.date DESC
Run Code Online (Sandbox Code Playgroud)

在PGAdmin中运行此查询时,我得到了我想要的两列:篮子日期和与该特定篮子相关联的所有line_item数量的总和.

但是,当我尝试为相同的数据撰写activerecord查询时:

User.find(2).baskets
  .select('baskets.date,'SUM(line_items.quantity)')
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')
Run Code Online (Sandbox Code Playgroud)

它返回篮子日期,但不返回分组的line_item数量的总和.理想情况下,我希望得到以下格式的结果,如{date => quantity,date => quantity ...},但不知道如何到达那里.

Eye*_*dic 7

单引号正在为你搞乱,这应该有用

User.find(2).baskets
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')
  .select("baskets.date, sum(line_items.quantity) as quantity_sum")
Run Code Online (Sandbox Code Playgroud)

您还可以使用pluck哪个将返回日期和总和的数组

User.find(2).baskets
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')
  .pluck("baskets.date, sum(line_items.quantity) as quantity_sum")
Run Code Online (Sandbox Code Playgroud)