0

我有一个 user_questions 表(UserQuestion 模型)和 user_answers 表(UserAnswer 模型),他们有这种格式的数据。

              user_questions table:
+------+-----------------------------------------------------+---------------------+
| id   | question                                            | created_at          |
+------+-----------------------------------------------------+---------------------+
|  1 | Is question asker is a fool?              | 2011-03-12 03:23:44 |
| 2 | have we got an answer yet?                 | 2011-03-12 03:24:06 |
+------+-----------------------------------------------------+---------------------+


          user_answers table:
+------+-------+------------------+---------------------+
| id   | value | user_question_id | created_at          |
+------+-------+------------------+---------------------+
| 1 | Yes he is!    |             1 | 2011-03-12 04:23:44 |
| 2 | OC he is!  |             1 | 2011-03-12 05:23:44 |
| 3 | yup he is!  |             1 | 2011-03-12 05:23:44 |
+------+-------+------------------+---------------------+

现在我需要找到问题的平均年龄,即avg(user_question.created_at - min(user_answers.created_at))

使用上述数据:由于 user_question(1) 在恰好 1 小时内得到了第一个答案,所以他的年龄是:1 小时

因为 user_question(2) 还没有得到任何答案,所以它的年龄是(DateTime.now - user_question.created_at(假设它的 1000 小时))。

结果_输出 = (1 + 1000)/2

我对 mysql sum、avg、min、max 操作非常熟悉。但不幸的是,在这里很难通过 rails join 运算符获得最终解决方案。

4

1 回答 1

1

你可能不喜欢这个答案,但我建议坚持使用 SQL。你应该能够在你的 sql 中使用 if 语句来让用户没有答案设置为 0。我不久前处理了一个类似的问题,发现 sql 的性能要好得多。

于 2013-10-15T04:27:40.437 回答