web-dev-qa-db-ja.com

「group by」カウントの「order by」結果?

このクエリ

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

ハッシュを返します。

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

次に、各グループの数で並べ替えます。クエリ内でそれを行うにはどうすればよいですか。

68
Mohit Jain

これを行う最も簡単な方法は、元のクエリに順序句を追加することです。 countメソッドに特定のフィールドを指定すると、count_ {column}という名前の出力列が生成されます。これは、注文呼び出しを追加することで生成されるsqlで使用できます。

Message.where('message_type = ?','incoming')
       .group('sender_number')
       .order('count_id asc').count('id')
107

私がこれを試したとき、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')
14
penner