2010-05-27 20 views
5

Tengo una lista de etiquetas en una base de datos.Cómo realizar COUNT() o COUNT (*)

Ex:

villan 
hero 
spiderman 
superman 
superman 

quería obtener una lista ordenada de los nombres de las etiquetas en orden ascendente y el número de veces que la etiqueta única apareció en la base de datos. Escribí este código:

Ex:

SELECT hashtag.tag_name 
     , COUNT(*) AS number 
    FROM hashtag 
    GROUP BY hashtag.tag_name 
    ORDER BY hashtag.tag_name ASC 

Esto produce el resultado correcto:

hero  , 1 
spiderman , 1 
superman , 2 
villan , 1 

¿Cómo puedo obtener el conteo completo de toda esta lista. La respuesta debería ser 4 en este caso porque naturalmente hay 4 filas. Parece que no puedo obtener un COUNT() correcto sin que la declaración falle.

¡Muchas gracias por la ayuda! :)

Respuesta

6
SELECT COUNT(DISTINCT `tag_name`) FROM `hashtag` 
+0

Muchas gracias, esto lo resolvió, Dios mío, sé que ni siquiera lo pensé. – ninu

+0

Entonces me agradecerán por lo que acepta esto para hacerme miembro de 3k + SF ;-) – zerkms

+1

¡LO HAGO! Además, creo que estás confundido; este voto alternativo no cambiará su representante en SF :) –

1

Uso COUNT DISTINCT(hashtag.tag_name) - no puede ir en la misma SELECT que tiene (excepto con un UNION por supuesto), pero en una SELECT de su propia (o un apropiado UNION) se le dará al resultado que desea

0

no estoy seguro acerca de la consulta en my-sql pero esta funciona bien con Oracle.

SELECT hashtag.tag_name, count(*) FROM hashtag GROUP BY cube(hashtag.tag_name) 
0

Para hacerlo exactamente como usted describe (para obtener el conteo completo de la lista resultante), que querría hacer un conteo de los resultados , como:

SELECT COUNT(*) AS uniquetags 
FROM (SELECT hashtag.tag_name, COUNT(*) AS number 
     FROM hashtag GROUP BY hashtag.tag_name 
     ORDER BY hashtag.tag_name ASC) 

Por supuesto, la cláusula ORDER BY es innecesaria y es tragada por el agregado externo COUNT, al igual que el interior COUNT.

Además, como algunas personas han señalado, el acceso directo a esto es un COUNT DISTINCT, como en:

SELECT COUNT(DISTINCT hashtag.tag_name) 
FROM hashtag 

Esto puede o no puede utilizar índices más eficiente, dependiendo de si se da cuenta de que doesn' Tengo que contar todo o no. Alguien con más conocimiento, no dude en comentar (o simplemente pruebe un par EXPLAIN s).