所以我在我的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),我实际上并没有得到符合我想要的结果。
这种查询分组是否可行?
感谢您的帮助!
答案 0 :(得分:1)
SQL的一个属性是 compositional 。这意味着对关系执行SELECT
的结果也是一种关系。换句话说,查询表将返回另一个表。
GROUP BY
操作确保了这一点,正如您所指出的,它仅适用于聚合函数。因此,SQL本身不能给你一组关系。
但是,在Ruby中很有可能实现这一点。请查看Enumerable
模块,特别是#group_by
。