【问题标题】:select sum of grouped rows in activerecord在活动记录中选择分组行的总和
【发布时间】:2017-02-03 22:44:39
【问题描述】:

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

用户 # has_many :baskets

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

LineItem #数量:整数 - 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 ... },但不知道如何到达那里。

【问题讨论】:

    标签: sql ruby-on-rails rails-activerecord


    【解决方案1】:

    单引号让你搞砸了,这应该可以工作

    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多