このクエリ
Message.where("message_type = ?", "incoming").group("sender_number").count
ハッシュを返します。
OrderedHash {"1234"=>21, "2345"=>11, "3456"=>63, "4568"=>100}
次に、各グループの数で並べ替えます。クエリ内でそれを行うにはどうすればよいですか。
これを行う最も簡単な方法は、元のクエリに順序句を追加することです。 countメソッドに特定のフィールドを指定すると、count_ {column}という名前の出力列が生成されます。これは、注文呼び出しを追加することで生成されるsqlで使用できます。
Message.where('message_type = ?','incoming')
.group('sender_number')
.order('count_id asc').count('id')
私がこれを試したとき、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')