сгруппировать по + сумме по нескольким столбцам в рельсах 3 - PullRequest
4 голосов
/ 31 января 2011

Мне нужно получить список мест, упорядоченных по количеству картинок, которые у меня есть в БД для этих мест, вот мой запрос

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 ]

21 голосов
/ 02 февраля 2011

Я не очень горжусь своим решением, но оно работает:

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] }

Есть отзывы?

2 голосов
/ 01 февраля 2011

В методе суммирования при группировке используется только один столбец, попробуйте следующее:

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

Хотя это может быть и лучше.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...