2010-11-23 20 views
4

J'ai une table author_comments avec un champs nom d'auteur, commentaire et identifiant de marque.Rails ActiveRecord distinct nombre d'attribut supérieur au nombre d'occurrences

Je voudrais obtenir le nombre (nombre) d'enregistrements où l'auteur a plus de N (2) enregistrements pour une marque donnée.

Par exemple,

author_comments

author_name  comment     brand 

joel    "loves donuts"    1 

joel    "loves cookies"   1 

joel    "loves oranges"   1 

fred    "likes bananas"   2 

fred    "likes tacos"    2 

fred    "likes chips"    2 

joe    "thinks this is cool"  1 

sally   "goes to school"   1 

sally   "is smart"     1 

sally   "plays soccer"    1 

Dans ce cas, ma requête doit retourner 2 pour la marque 1 et 1 pour la marque 2.

Je suis intéressé par l'option la plus performante ici , ne recevant pas tous les enregistrements de la DB et les triant à travers ruby, je peux le faire. Je suis à la recherche de la meilleure façon d'utiliser des constructions d'enregistrements actifs ou sql.

Mise à jour: Voici le SQL:

SELECT author_name, COUNT(*) AS author_comments 
FROM fan_comments 
WHERE brand_id =269998788 
GROUP BY author_name 
HAVING author_comments > 2; 

dois-je faire juste find_by_sql?

Répondre

3

Vous pouvez définir la même requête en utilisant des constructions de disques actifs:

FanComments.all(
    :select => 'author_name, count(*) as author_comments', 
    :group => 'author_name', 
    :having => 'author_comments > 2') # in rails 2 

ou:

FanComments. 
    select('author_name, count(*) as author_comments'). 
    group('author_name'). 
    having('author_comments > 2') # in rails 3 
1
FanComment.group(:author_name).count