Rails 5,Postgesql和按关联分组

时间:2018-10-17 05:16:53

标签: ruby-on-rails postgresql ruby-on-rails-5

我正在努力了解Postgesql并按关联进行分组。

我有一个重复很多的审判。我想按重复分组以在变量中使用。目前我有:

@trials = Trial.joins(:repetitions).group('repetitions.repetition_index')

但是出现此错误。

PG::GroupingError: ERROR:  column "trials.id" must appear in the GROUP BY clause or be used in an aggregate function

现在,通过阅读有关内容,我需要在我的分组方法中包括trials.id,但是当我这样做时,输出不再按repetitions.repetition_index分组。似乎好像是按trials.id分组的。

如何确保仅由repetitions.repetition_index来分组?

更新

尝试:

@trials = Trial.joins(:repetitions).select('repetitions.repetition_index,repetitions.treatment_index').group('trials.id, repetitions.repetition_index,repetitions.treatment_index')

并致电:

<% @trials.each do |r| %>
    <table class="table table-bordered">
        <tr>
            <td><%= r.repetition_index %></td>
            <td><%= r.treatment_index %></td>
        </tr>
    </table>
<% end %>

给我输出:

|1|1|
-----
|1|2|
-----
|2|1|
-----
|2|2|
-----

当我想要获得时:

| |1|
|1|2|
-----
| |1|
|2|2|
-----

1 个答案:

答案 0 :(得分:1)

如果要消除此错误,可以执行

@trials = Trial.joins(:repetitions).group('trials.id, repetitions.repetition_index')

如果您不想按trails.id分组,而又不想按repetitions.repetition_index分组,则只需从查询中选择“ repeats.repetition_index”即可。

@trials = Trial.joins(:repetitions).select('repetitions.repetition_index').group('repetitions.repetition_index')

让我知道你是否清楚

更新 根据您更新的问题,我认为您需要以下类似的内容。查询未经测试。让我知道它是否不起作用

 Trial.
 joins(:repetitions).
 select('repetitions.repetition_index,repetitions.treatment_index').
 group_by {
    |repetition| repetitions.repetition_index
  }