【问题标题】:rails group by multiple columnsrails 按多列分组
【发布时间】:2009-08-06 20:49:20
【问题描述】:

我有带emptype_id 和calendar_id actual_head、estimate_head 的预算表

当我执行Budgets.sum(:actual_head ,:group=>"emptype_id,calendar_id") 时,我没有得到按上述两列分组的结果,而只能得到按emptype_id 分组的结果

但是当我检查日志时,sql 查询是正确的

SELECT sum(`budgets`.actual_head) AS sum_actual_head, emptype_id,calendar_id AS emptype_id_calendar_id FROM `budgets` GROUP BY emptype_id,calendar_id

有 103 行

我想遍历每个 emptype_id 和 calendar_id 以获得 actual_head 的总和 并对其进行一些计算。

【问题讨论】:

    标签: sql ruby-on-rails activerecord


    【解决方案1】:

    rails 不支持多列分组。您必须使用常规查找全部:

    budgets = Budgets.find(:all, 
                           :select => "emptype_id, calendar_id, sum(budgets.actual_head) AS sum_actual_head", 
                           :group => "emptype_id, calendar_id")
    
    budgets.each { |budget| puts budget.sum_actual_head }
    

    【讨论】:

    • 对于更新版本的 rails (>=3.2),请使用 Budgets.select("emptype_id, calendar_id, sum(budgets.actual_head) AS sum_actual_head").group("emptype_id, calendar_id"),因为 find 仅适用于 id。
    【解决方案2】:

    我作弊。做:group => ["emptype_id,calendar_id"].

    不想要你也不想要,但这至少有效。

    【讨论】:

      【解决方案3】:

      这个我不确定,买试试:group => [:emptype_id, :calendar_id]

      【讨论】:

      • 嗨,这不起作用会引发以下错误;嗯没有办法按两列分组“ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'emptype_idcalendar_id' in 'field list': SELECT sum(budget s.actual_head) AS sum_actual_head, emptype_idcalendar_id AS emptype_idcalendar_id FROM @987654323 @ GROUP BY emptype_idca 借出 ID"
      • 这适用于 Rails 3.0.x:Evaluation.average(:score, :group => [:person_id, :category])
      • 它会出现错误。如果我们运行此代码,活动记录会将这些列名解析为单个单词,例如 emptype_idcalendar_id
      猜你喜欢
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2015-12-02
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多