如何在group_by计数查询中获取总结果集大小?

时间:2015-12-01 22:43:40

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord kaminari

我的模型中有以下查询:

Post.where("created_utc > ? AND lower(category) = ?", 0, 'videos').group(:domain).order('count_all desc').page(1).per(25).count

我使用kaminari gem进行分页,但问题是:此查询返回看似已排序的哈希值。但是我无法知道总结果数是多少。

如果您不想考虑kaminari,可以参考以下查询:

Post.where("created_utc > ? AND lower(category) = ?", min_time, subreddit.downcase).group(:domain).order('count_all desc').limit(limit).offset(start).count

无论如何,我无法弄清楚结果的总数是多少。我该如何解决这个问题?有没有办法弄清楚没有限制的总结果集大小是什么?

4 个答案:

答案 0 :(得分:0)

除了基于ruby的方法之外,我还会对运行单独的基于数据库的计数进行基准测试。

posts        = Post.where("created_utc > ? AND lower(category) = ?", min_time, subreddit.downcase)
domain_count = posts.count("distinct domain")
result       = posts.group(:domain).order('count_all desc').limit(limit).offset(start).count

答案 1 :(得分:0)

你想要的是.length而不是.count,如下所示:

Post.where("created_utc > ? AND lower(category) = ?", 0, 'videos').group(:domain).order('count_all desc').page(1).per(25).length
  
      
  • .count执行SQL COUNT
  •   
  • .length计算结果数组的长度
  •   
     

@BenHawker在https://stackoverflow.com/a/34541020/380607提供

答案 2 :(得分:0)

答案 3 :(得分:-1)

我会把它分成多行:

# 1. get the results
posts = Post.where("created_utc > ? AND lower(category) = ?", 0, 'videos').group(:domain).order('count_all desc')
# 2. count the total size
total_size = posts.count
# 3. use kaminari for pagination
posts_paged = posts.page(1).per(25)