代码之家  ›  专栏  ›  技术社区  ›  Joelio

Rails ActiveRecord属性的非重复计数大于出现次数

  •  4
  • Joelio  · 技术社区  · 14 年前

    我有一个表格,作者评论栏,作者姓名,评论栏和品牌标识栏。

    我想知道作者对某个品牌拥有超过n(2)条记录的记录的数量(计数)。

    例如,

    小精灵

    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
    

    在这种情况下,我的查询应该返回品牌1的2和品牌2的1。

    我感兴趣的是这里的最佳性能选项,不是从数据库中获取所有记录并在Ruby中对它们进行排序,我可以这样做。我正在寻找使用活动记录构造或SQL的最佳方法。

    更新: 以下是SQL:

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

    我应该通过SQL找到你吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Alexis    13 年前

    可以使用活动记录构造定义相同的查询:

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

    或:

    FanComments.
      select('author_name, count(*) as author_comments').
      group('author_name').
      having('author_comments > 2') # in rails 3
    
        2
  •  1
  •   Ivan Denysov    9 年前
    FanComment.group(:author_name).count