J'ai 4 tables: Utilisateurs, Entraînements, Exercices et Résultats. Un "Utilisateur" affiche "Résultats" pour "Exercices" qui sont liés à un seul "Entraînement". Mais lorsque l'utilisateur publie des résultats, puisqu'il y a plusieurs exercices, les résultats d'un entraînement peuvent être liés à un "post_id" unique. Je voudrais savoir combien de minutes totaux un utilisateur a exercé en fonction du nombre de "post_ids" qu'ils ont fournis qui peuvent être liés au tableau "Workouts" où une colonne "workout_duration" montre combien de minutes chaque entraînement dure. Voici quelques exemples de données, où dans ce cas, l'entraînement (workout_id = 1) a deux exercices et a une durée de workout_duration de 1 minute.Les valeurs SOMME DISTINCT ne peuvent pas apparaître dans Ruby on Rails
Résultats:
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|
-------+-----------+--------+------------+---------------+
Entraînements:
workout_id| workout_duration|
----------+-----------------+
1| 1|
j'ai essayé de récupérer le nombre total de minutes en fonction de la requête ci-dessous, mais il renvoie une somme de 6 quand je veux qu'il renvoie une valeur de 3 ... Je pense que c'est parce que SUM ne prend pas en compte DISTINCT post_ids ... il ne fait que sommer tous les post_ids.
@user = User.find(current_user)
@total_minutes = @user.results.includes(:workout).select(:post_id).distinct.sum(:workout_duration)
J'ai cherché haut et bas pour des solutions en vain ... des idées?
EDIT: Voici le SQL généré à partir de la requête ci-dessus:
SELECT DISTINCT SUM(workout_duration)
FROM "results"
LEFT OUTER JOIN "workouts" ON "workouts"."id" = "results"."workout_id"
WHERE "results"."user_id" = ? [["user_id", 123]]
Avez-vous le SQL généré? –
Salut @EricDuminil, je viens de faire un montage rapide et ajouté le SQL généré. – BYates
'SELECT DISTINCT SUM (workout_duration)' semble incorrect. Je ne sais pas comment l'obtenir dans une requête de rails. Vous pouvez obtenir une liste de 'workouts 'en fonction d'un' post_id' distinct en premier et de la somme après. –