【问题标题】:Multiple sum()s in ActiveRecord in RailsRails 中 ActiveRecord 中的多个 sum()
【发布时间】:2011-08-05 03:23:54
【问题描述】:

我想将多个 sums() 链接到一个组,同时选择其他字段。我也更喜欢使用 ActiveRecord 方法来执行此操作,而不是手动构造一个 sql 字符串,因为我以后可能会修改 ActiveRecord 继承类的行为。

例如我想表示语句(作为例子)

select user_id, sum(cost) as total_cost, sum(quantity) as total_quantity from line_items group by user_id

类似:

LineItem.select(:user_id).group(:user_id).sum(:cost).sum(:quantity)

原因是我以后可能会添加额外的 group-bys 和 where-clauses,所有的总和都有共同点。

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    这对我有用:

    require "active_record"
    require "logger"
    
    ActiveRecord::Base.logger = Logger.new(STDOUT)
    ActiveRecord::Base.establish_connection :adapter => "postgresql", :database => "francois"
    
    ActiveRecord::Base.connection.execute "DROP TABLE IF EXISTS values"
    ActiveRecord::Base.connection.execute "CREATE TABLE values(user_id INTEGER NOT NULL, quantity INTEGER NOT NULL DEFAULT 1, cost INTEGER NOT NULL DEFAULT 2)"
    
    class Value < ActiveRecord::Base
    end
    
    2.times do
      5.times do |n|
        Value.create!(:user_id => n)
      end
    end
    
    Value.group(:user_id).select('user_id, SUM(cost) AS total_cost, SUM(quantity) AS total_quantity').each do |value|
      p [value.user_id, value.total_quantity, value.total_cost]
    end
    

    我尝试了sum(:cost, :quantity),但#sum 不希望以这种方式定义参数。我也试过sum(:cost =&gt; :total_cost, :quantity =&gt; :total_quantity),没有用。

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2012-08-02
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多