2010-05-27 3 views
5

J'ai une liste d'étiquettes dans une base de données.Comment effectuer COUNT() ou COUNT (*)

Ex:

villan 
hero 
spiderman 
superman 
superman 

Je voulais obtenir une liste triée des noms de balises dans l'ordre croissant et le nombre de fois que l'étiquette unique est apparu dans la base de données. J'ai écrit ce code:

Ex:

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

Cela donne le résultat correct:

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

Comment puis-je obtenir le plein COUNT de cette liste entière. La réponse devrait être 4 dans ce cas car il y a naturellement 4 lignes. Je n'arrive pas à obtenir un COUNT() correct sans que l'instruction échoue.

Merci beaucoup pour votre aide! :)

Répondre

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

Merci beaucoup cela a résolu le problème, ça alors je sais que je n'y avais même pas pensé. – ninu

+0

Ensuite, je serai reconnaissant si vous acceptez cela pour me faire 3k + SF membre ;-) – zerkms

+1

Je vais le faire! Aussi, je pense que vous êtes confus; cette upvote ne changera pas votre représentant sur SF :) –

1

utilisation COUNT DISTINCT(hashtag.tag_name) - il ne peut pas aller dans le même SELECT vous (sauf avec un UNION bien sûr), mais sur un SELECT de son propre (ou un UNION approprié), il donnera la résultat que vous voulez.

0

Je ne suis pas sûr de la requête dans my-sql mais celui-ci fonctionne très bien avec Oracle.

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

Pour ce faire exactement comme vous décrivez (pour obtenir le décompte complet de la liste des résultats), vous voulez prendre un compte des résultats, comme:

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) 

Bien sûr, la clause ORDER BY est inutile et est avalée par l'agrégat externe COUNT, tout comme le code interne COUNT.

De plus, comme peu de gens l'ont souligné, le raccourci vers c'est un COUNT DISTINCT, comme dans:

SELECT COUNT(DISTINCT hashtag.tag_name) 
FROM hashtag 

Cela peut ou ne peut pas utiliser les index plus efficacement, selon qu'il se rend compte qu'il n » Je dois tout compter ou pas. Quelqu'un avec plus de connaissances, s'il vous plaît n'hésitez pas à commenter (ou juste essayer un couple EXPLAIN s).