【问题标题】:How do I group by and order by count in Rails?如何在 Rails 中按计数分组和排序?
【发布时间】:2013-12-23 22:29:29
【问题描述】:

如何将此 SQL 转换为 Ruby/Rails?

select tag, count(*) c from tags group by tag order by c desc;

我发现我可以做到:

Post.select(:user_id).group(:user_id).count
Post.count(group: :user_id)
Post.all(group: :user_id, select: "user_id, count(*) as count")
Post.find(:all, select: "user_id, count(*) as count", group: :user_id)

#1 返回一个哈希值。 #2、#3 和 #4 给出了弃用警告。 (我使用 Post 是因为我还没有 Tag 的任何数据。)

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-4 rails-activerecord


    【解决方案1】:

    试试:

     Tag.select("tag, count(*) as total_count").group("tag").reverse_order
    

    更多信息请阅读:http://guides.rubyonrails.org/active_record_querying.html

    【讨论】:

    • 我不得不调整它:Tag.select("tag, count(*) as total_count").group("tag").order("total_count").reverse_order
    • reverse_order 不接受参数。我的结尾是:self.tags.select(:tag, "count(*) as count").group(:tag).order(count: :desc).map {|t| t.tag }.join(' ')。谢谢!
    • 那还是不行:ERROR: column "tags.id" must appear in the GROUP BY...我想如果你不指定要排序的列,它默认为id列,它不在select中。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多