web-dev-qa-db-fra.com

"Ordonner par" résultat de "regrouper par" nombre?

Cette requête

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

me rendra un hachage.

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

Maintenant, je veux commander par nombre de chaque groupe. Comment puis-je faire cela dans la requête.

68
Mohit Jain

La façon la plus simple de procéder consiste à simplement ajouter une clause order à la requête d'origine. Si vous donnez à la méthode count un champ spécifique, elle générera une colonne de sortie avec le nom count_ {colonne}, qui peut être utilisée dans le sql généré en ajoutant un appel de commande:

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

Quand j'ai essayé cela, Rails m'a donné cette erreur

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

Notez qu'il dit SELECT ... AS count_all

J'ai donc mis à jour la requête de la réponse de @ Simon pour ressembler à ceci et cela fonctionne pour moi

.order('count_all desc')
14
penner