2009-10-30 13 views
19

Cuando uso User.count(:all, :group => "name"), obtengo varias filas, pero no es lo que quiero. Lo que quiero es el recuento de las filas. ¿Cómo puedo obtenerlo?¿Cómo contar un grupo por las filas en los rieles?

+0

posible duplicado de [Contar y agrupar al mismo tiempo] (http://stackoverflow.com/questions/499767/counting-and-grouping-at-the-same-time) –

Respuesta

26
  1. User.count le dará el número total de usuarios y se traduce en el siguiente SQL: SELECT count(*) AS count_all FROM "users"
  2. User.count(:all, :group => 'name') le dará la lista de nombres únicos, junto con sus cargos, y se traduce en este SQL: SELECT count(*) AS count_all, name AS name FROM "users" GROUP BY name

Sospecho que quiere la opción 1 anterior, pero no tengo claro qué es exactamente lo que quiere/necesita.

+0

gracias hgimenez, lo Quiero seleccionar recuento (*) como count_all) de (seleccione el nombre como nombre del grupo de usuarios por nombre) – user199403

+0

En ese caso, la respuesta de Sikachu parece más apropiada: desea el número de nombres únicos, y eso servirá. – hgmnz

5

Trate de usar User.find (: todos,: Grupo => "Nombre") contar

Buena suerte.!

11

¿Probablemente quieres testear el nombre del usuario?

User.count(:name, :distinct => true) 

devolvería 3 si tiene un usuario con el nombre John, John, Jane, Joey (por ejemplo) en la base de datos.

________ 
| name | 
|--------| 
| John | 
| John | 
| Jane | 
| Joey | 
|________| 
23

Actualmente (18.03.2014 - Rieles 4.0.3) esto es sintaxis correcta:

Model.group("field_name").count 

Devuelve hash con los recuentos como valores por ejemplo

SurveyReport.find(30).reports.group("status").count 

#=> { 
    "pdf_generated" => 56 
} 
Cuestiones relacionadas