通过ActiveRecord提取多列的平均值

liq*_*she 0 ruby activerecord ruby-on-rails

我有一个成绩模型,我需要从中提取两列的平均值 - 准确性和时间。I\xe2\x80\x99m 使用以下查询将两个值放在一起,而不是查询模型两次。

\n\n
Grade.where(student_id: 25).pluck('avg(accuracy), avg(time)')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到了两个值,但它们的格式如下,我不明白:

\n\n
[[#<BigDecimal:7f9c5a890410,\xe2\x80\x998.0\xe2\x80\x99,9(18)>, #<BigDecimal:7f9c5a8903c0,\xe2\x80\x9910.0\xe2\x80\x99,9(18)>]]\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何从中提取我需要的值?即 avg_accuracy = 8.0 和 avg_time = 10.0

\n\n

我是 Ruby、Rails、ActiveRecord 的新手。我很感激你的帮助。

\n

Urs*_*sus 6

grades = Grade.where(student_id: 25, class_id: 123).pluck('avg(accuracy), avg(time)').first\n
Run Code Online (Sandbox Code Playgroud)\n\n

应得

\n\n
[#<BigDecimal:7f9c5a890410,\xe2\x80\x998.0\xe2\x80\x99,9(18)>, #<BigDecimal:7f9c5a8903c0,\xe2\x80\x9910.0\xe2\x80\x99,9(18)>]\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在将它们转换为简单的浮点数。

\n\n
grades.map!(&:to_f)\n
Run Code Online (Sandbox Code Playgroud)\n\n

应得

\n\n
[8.0, 10.0]\n
Run Code Online (Sandbox Code Playgroud)\n