2011-01-14 31 views
59

Tengo un conjunto de datos que le pregunta al cliente cuántas mascotas tiene, por ejemplo. ¿Hay alguna manera con una consulta de contar los valores distintos (1,2,3, etc.)? Gracias!Contar valores distintos

+----------+------+ 
| Customer | Pets | 
+----------+------+ 
|  20 | 2 | 
|  21 | 3 | 
|  22 | 3 | 
|  23 | 2 | 
|  24 | 4 | 
+----------+------+ 

Lo que quiero es un dicho listado:

  • 2 tenido 2 Mascotas
  • 2 tenía 3 Mascotas
  • 1 tenía 4 Mascotas

Respuesta

92

Usted puede hacer una diferencia cuenta de la siguiente manera:

SELECT COUNT(DISTINCT column_name) FROM table_name; 

EDITAR:

Después de su aclaración y actualización de la pregunta, veo ahora que es una pregunta bastante diferente de lo que habíamos pensado originalmente. "DISTINCT" tiene un significado especial en SQL. Si he entendido bien, usted quiere algo como esto:

  • 2 clientes tenían mascotas 1
  • 3 clientes habían 2 mascotas
  • 1 clientes habían 3 mascotas

Ahora usted está probablemente va para querer utilizar una subconsulta:

select COUNT(*) column_name FROM (SELECT DISTINCT column_name); 

Avísame si no se trata de algo que usted está buscando.

+0

Lo intenté con cero suerte.Aquí hay un ejemplo de mis datos; Cliente | Mascotas 20 | 2 21 | 3 22 | 3 23 | 2 24 | 4 Lo que quiero es una lista que dice: 2 tenía 2 Mascotas 2 tenía 3 Mascotas 1 tenía 4 Mascotas – willlangford

+1

haciendo una subconsulta? Creo que es demasiado sobrecarga para una tarea tan simple ... – maid450

+0

En realidad estaba buscando la versión original, y la primera parte de esta solución funcionó para mí. ¡Gracias por no eliminarlo! –

34

Ok, eliminé mi respuesta anterior porque finalmente no era lo que willlangford estaba buscando, pero hice ver que tal vez todos estábamos malinterpretando la pregunta.

También pensé en la cosa SELECT DISTINCT... al principio, pero me parecía demasiado extraño que alguien necesitara saber cuántas personas tenían un número diferente de mascotas que el resto ... por eso pensé que tal vez la pregunta era no lo suficientemente claro

Entonces, ahora que se aclara el significado de la pregunta real, hacer una subconsulta para esto es bastante sobrecarga, preferiría utilizar una cláusula GROUP BY.

Imagine que tiene la tabla customer_pets así:

+-----------------------+ 
| customer | pets | 
+------------+----------+ 
| customer1 | 2  | 
| customer2 | 3  | 
| customer3 | 2  | 
| customer4 | 2  | 
| customer5 | 3  | 
| customer6 | 4  | 
+------------+----------+ 

continuación

SELECT count(customer) AS num_customers, pets FROM customer_pets GROUP BY pets 

volvería:

+----------------------------+ 
| num_customers | pets | 
+-----------------+----------+ 
|  3  | 2  | 
|  2  | 3  | 
|  1  | 4  | 
+-----------------+----------+ 

como sea necesario.

+0

El nombre de columna en 'count (customer)' es superfluo. Solo puede usar: 'SELECT COUNT (*) AS num_customers, pets FROM customer_pets GROUP BY pets' – sgussman

+3

@sgussman No explícitamente, si permite valores NULOS para' cliente' entonces 'COUNT (cliente)' no los contará, mientras ' COUNT (*) 'o' COUNT (mascotas) 'lo hará. En ese caso, depende del comportamiento que prefiera. En cualquier caso, incluso si no hace la diferencia la mayor parte del tiempo, me gusta especificar la columna que quiero contar para la legibilidad. – maid450

Cuestiones relacionadas