Tengo un modelo de publicación con has_many
comentarios. Cada publicación tiene una identificación de subproceso (pero no hay ningún modelo llamado Subproceso).ActiveRecord: cuente con grupos
Así que si quiero contar el número de hilos en este post me SMTH como
> post.comments.count(:thread, :distinct => true)
SELECT COUNT(DISTINCT "comments"."thread") FROM "comments" WHERE "comments"."post_id" = 3
Y esto funciona bien. Pero, ¿y si quiero contar la cantidad de hilos con un solo comentario?
> post.comments.group(:thread).having('COUNT(*) == 1').count
SELECT COUNT(*) AS count_all, thread AS thread FROM "comments" WHERE "comments"."post_id" = 3 GROUP BY thread HAVING COUNT(*) == 1 ORDER BY id
Así que tengo un OrderedHash en lugar de Entero. Y tengo que hacer el paso innecesario
> post.comments.group(:thread).having('COUNT(*) == 1').count.count
¿Hay alguna solución mejor?
Generalmente SQL espera "=" no "==" para la equivalencia. Su respuesta probablemente sea correcta para algunas marcas de SQL, pero falla en MySQL sin este cambio. –
Eso es correcto. Sin embargo, estaba tratando de ser coherente con el formato que estaba usando en la publicación original. – Brad