在rails 3中的多个列上按+总和

时间:2011-01-31 20:38:19

标签: ruby-on-rails ruby-on-rails-3 activerecord sum

我需要获取按照我在数据库中为这些位置设置的图片数量排序的位置列表,这是我的查询

Location.select(:city).group(:city).order("SUM(images_count) DESC").sum(:images_count)

这很像一个魅力,不幸的是,我现在需要添加省和国家来防止出现歧义,所以我现在有了这个

Location.select(:city, :province, :country).group(:city, :province, :country).order("SUM(images_count) DESC").sum(:images_count)

这不起作用:(

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:21)

我对我的解决方案并不感到自豪,但它确实有效:

Location.group(:city, :province, :country)
        .select(:city, :province, :country, "SUM(images_girl_count) as sum_images_count")
        .order("sum_images_count DESC")
        .collect{ |location| [location.city, location.province, location.country, location.sum_images_count] }

有任何反馈吗?

答案 1 :(得分:2)

sum方法在分组时只使用一列,试试这个:

Location.select(:city, :province, :country, "SUM(images_count) as sum_images_count").group(:city, :province, :country).order("sum_images_count DESC")

这可能是一种更好的方式。

我希望它会有所帮助。