在activerecord中选择分组行的总和

时间:2017-02-03 22:44:40

标签: sql ruby-on-rails activerecord

将SQL查询转换为ActiveRecord时遇到问题。这是我的域建模的简化版本:

用户#has_many:baskets

购物篮#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

在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')

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

1 个答案:

答案 0 :(得分:6)

单引号搞砸了这个,这应该可行

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

您还可以使用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")