78 votes

« Classer par » résultat du nombre de « regrouper par » ?

Cette requête

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

me rendra un hasch.

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

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

125voto

Simon Elliston Ball Points 1905

Le moyen le plus simple de procéder consiste simplement à ajouter une clause de commande à 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_{column}, 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')

19voto

penner Points 576

Quand j'ai essayé cela, les rails m'ont 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 est 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')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X