无法对 Rails 上 Ruby 中的不同值求和

Can't SUM DISTINCT values in Ruby on Rails

我有 4 个 table:用户、锻炼、练习和结果。 "User" 为 "Exercises" 发布了 "Results",链接到单个 "Workout"。但是当用户发布结果时,由于有多个练习,一个练习的结果可以与唯一的 "post_id" 相关联。我想知道用户根据他们提供的 "post_ids" 可以链接到 "Workouts" table 的总分钟数,其中 "workout_duration" 列显示了多少分钟每次锻炼持续。这是一些示例数据,在这种情况下,锻炼 (workout_id=1) 有两个锻炼,workout_duration 为 1 分钟。

结果:

user_id| workout_id| post_id| exercise_id| number_of_reps|
-------+-----------+--------+------------+---------------+
    123|         1 |       1|          1 |             18|
    123|         1 |       1|          2 |             29|      
    123|         1 |       2|          1 |             15|
    123|         1 |       2|          2 |             30|
    123|         1 |       3|          1 |             20|
    123|         1 |       3|          2 |             28|
-------+-----------+--------+------------+---------------+

锻炼:

workout_id| workout_duration|
----------+-----------------+
         1|                1|

我试图根据下面的查询检索总分钟数,但当我希望它 return 值为 3 时,它 return 总和为 6...我认为这是因为 SUM 没有考虑 DISTINCT post_ids...而只是对所有 post_ids 求和。

@user = User.find(current_user)
@total_minutes = @user.results.includes(:workout).select(:post_id).distinct.sum(:workout_duration)

我到处寻找解决方案都无济于事...有什么想法吗?

编辑: 这是从上面的查询生成的 SQL:

SELECT DISTINCT SUM(workout_duration) 
FROM "results" 
LEFT OUTER JOIN "workouts" ON "workouts"."id" = "results"."workout_id" 
WHERE "results"."user_id" = ?  [["user_id", 123]]

我使用原始 SQL:

解决了这个问题
 @minute_total = ActiveRecord::Base.connection.execute(minute_query)[0][0]

private
def minute_query
"SELECT SUM(workout_duration) 
FROM (SELECT DISTINCT(results.post_id), results.user_id, workouts.workout_duration 
FROM results LEFT OUTER JOIN workouts ON results.workout_id = workouts.id   
WHERE results.user_id = #{@user.id})"
end