【问题标题】:Group by a column, in a loop按列分组,循环
【发布时间】:2013-11-13 12:06:15
【问题描述】:

如何使用此查询按:key_id 进行分组(key_id 是报告表中的一列),并且该查询是称为Project 的模型中的一个方法

self.reports.select{ |report| report.level <= 50}

【问题讨论】:

    标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4


    【解决方案1】:

    这应该可以解决问题:

    self.reports.select{ |report| report.level <= 50 }.group_by(&:key_id)
    

    .group_by(&amp;:key_id).group_by{ |report| report.key_id } 的简洁表达方式

    【讨论】:

      【解决方案2】:

      您不想在此处使用带有块的 select 方法。原因是这是在数组上定义的方法,因此返回的是纯 ruby​​ 数组,而不是关系对象。而是这样做:

      self.reports.where('level <= ?', 50).group(:key_id)
      

      【讨论】:

      • 我明白了:column "reports.id" must appear in the GROUP BY clause or be used in an aggregate function - ` SELECT "reports".* FROM "reports" WHERE "reports"."project_id" = $1 AND (level
      • 您需要在上面的代码中添加 select 语句,以指定分组时要对其他列执行的操作 - 例如如果您只想计算具有相同 key_id 的元素,则需要添加 'select('key_id, count(*) as count')`
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2018-04-02
      • 2019-04-24
      • 2016-01-10
      相关资源
      最近更新 更多