我正在努力了解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|
-----
答案 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
}