Counting and grouping at the same time

后端 未结 4 1996
轻奢々
轻奢々 2020-12-08 01:39

I have a Mail model with the following schema:

t.string   \"mail\"
t.integer  \"country\"
t.boolean  \"validated\"
t.datetime \"created_at\"
t.d         


        
4条回答
  •  感情败类
    2020-12-08 01:55

    With Rails 3 you can simplify it further:

    Mail.where(validated: true).count(group: :country)
    

    You can order by fields in the group - in this case only :country would be valid:

    Mail.where(validated: true)
        .order(:country)
        .count(group: :country)
    

    You can also order by the count, using "count_all":

    Mail.where(validated: true)
        .order("count_all desc")
        .count(group: :country)
    

    You can also limit the number of groups returned. To do this you must call limit before calling count (because #count returns ActiveSupport::OrderedHash):

    Mail.where(validated: true)
        .order("count_all desc")
        .limit(5)
        .count(group: :country)
    

    Updated syntax for Rails 4:

    Mail.where(validated: true)
        .group(:country)
        .count
    

提交回复
热议问题