rails COUNT SELECT DISTINCT
J'enregistre le nombre de fois que les utilisateurs de visionner une série de vidéos. Maintenant, je suis en train de faire un graphique du nombre d'utilisateurs de regarder n'importe quelle vidéo chaque jour.
UserVideoWatching.where("created_at >= ? AND user_id != ?",1.month.ago, User.elephant.id).group("DATE(created_at)").reorder('created_at').count
produit sql
SELECT COUNT(*) AS count_all, DATE(created_at) AS date_created_at FROM `user_video_watchings` WHERE (created_at >= '2013-01-27 10:43:24' AND user_id != 7) GROUP BY DATE(created_at) ORDER BY created_at
qui produit des résultats corrects pour toutes les vidéos regardées chaque jour, mais comme je l'ai dit, je veux seulement montrer à chaque utilisateur une fois.
Le sql je veux, c'est
SELECT COUNT(DISTINCT user_id) AS count_all, DATE(created_at) AS date_created FROM `user_video_watchings` WHERE (created_at >= '2013-01-27 10:33:18' AND user_id != 7) GROUP BY DATE(created_at) ORDER BY created_at
alors j'ai pensé
UserVideoWatching.where("created_at >= ? AND user_id != ?",1.month.ago, User.elephant.id).group("DATE(created_at)").reorder('created_at').select('COUNT(DISTINCT user_id) AS count_all, DATE(created_at) AS date_created')
permettrait de faire ce que je voulais. Mais ce qui donne
[#<UserVideoWatching >, #<UserVideoWatching >]
plutôt que d'une table de hachage.
Des idées?
Je suis à l'aide de rails 3.1 et mysql
source d'informationauteur Edward
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
distinct.count(:attribute_name)
.(Dans Rails 3, utilisation:
count(:user_id, distinct: true)
à la place)Ainsi:
Pas en mesure de tester, mais je pense que cela va produire le SQL que vous êtes après.
Dans les Rails 4, à l'aide de
(...).uniq.count(:user_id)
comme mentionné dans d'autres réponses (pour cette question, et d'ailleurs sur) va en effet conduire à un supplément deDISTINCT
être dans la requête:SELECT DISTINCT COUNT(DISTINCT user_id) FROM ...
Ce que nous avons à faire est d'utiliser une chaîne SQL nous-mêmes:
(...).count("DISTINCT user_id")
Qui nous donne:
SELECT COUNT(DISTINCT user_id) FROM ...
Doit utiliser distinct, dans les rails 5.0.1, distincte de l'égalité uniq, mais