我应该使用group by来进行此查询吗?

时间:2015-03-11 02:29:44

标签: sql ruby-on-rails postgresql activerecord

所以我在我的rails应用程序中有这个表:

create_table "scores", force: true do |t|
  t.integer  "points"
  t.integer  "exercise_id"
  t.integer  "user_id"
  t.integer  "attempt_number"
  t.boolean  "complete"
  t.integer  "count_hints"
  t.text     "attempt_content"
  t.integer  "seed"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.integer  "time_taken"
  t.integer  "tutor_session_id"
  t.integer  "problem_id"
end

上下文:学生处理由EXERCISE_ID,PROBLEM_ID和SEED唯一标识的问题。

当学生处理问题时,提交的任何答案都将存储在此分数表中。答案将被存储,他们进行该尝试需要多长时间,他们所处的尝试号码,答案是否正确等等。一旦他们回答了正确答案,他们就可以继续讨论下一个问题。

对于给定用户,我想要检索的是分数,但是按给定的exercise_id,problem_id和seed分组。

我想返回一个数组,每个元素都是所有尝试的另一个数组,而不是给定的exercise_id,problem_id和seed。

我一直在尝试使用GROUP BY exercise_id,problem_id和seed,但如果我不使用某种聚合器(如count或sum),我实际上并没有得到符合我想要的结果。

这种查询分组是否可行?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

SQL的一个属性是 compositional 。这意味着对关系执行SELECT的结果也是一种关系。换句话说,查询表将返回另一个表。

GROUP BY操作确保了这一点,正如您所指出的,它仅适用于聚合函数。因此,SQL本身不能给你一组关系。

但是,在Ruby中很有可能实现这一点。请查看Enumerable模块,特别是#group_by

http://ruby-doc.org/core-2.2.1/Enumerable.html