"Упорядочить по" результату "по группам" считать? - PullRequest
66 голосов
/ 20 августа 2011

Этот запрос

Message.where("message_type = ?", "incoming").group("sender_number").count

вернет мне хеш.

OrderedHash {"1234"=>21, "2345"=>11, "3456"=>63, "4568"=>100}

Теперь я хочу заказать по количеству каждой группы. Как я могу сделать это в запросе.

Ответы [ 2 ]

105 голосов
/ 20 августа 2011

Самый простой способ сделать это - просто добавить предложение order в исходный запрос. Если вы дадите методу подсчета определенное поле, он сгенерирует выходной столбец с именем count_ {column}, который можно использовать в sql, сгенерированном путем добавления вызова заказа:

Message.where('message_type = ?','incoming')
       .group('sender_number')
       .order('count_id asc').count('id')
14 голосов
/ 12 февраля 2013

Когда я попробовал это, rails дал мне эту ошибку

SQLite3::SQLException: no such column: count_id: SELECT  COUNT(*) AS count_all, state AS state FROM "ideas"  GROUP BY state ORDER BY count_id desc LIMIT 3

Обратите внимание, что там написано SELECT ... AS count_all

Поэтому я обновил запрос из ответа @ Simon, чтобы он выглядел какэто и у меня работает

.order('count_all desc')
...