2010-05-27 12 views
5

Ho una lista di tag in un database.Come eseguire COUNT() o COUNT (*)

Es:

villan 
hero 
spiderman 
superman 
superman 

ho voluto ottenere un elenco ordinato dei nomi dei tag in ordine crescente e il numero di volte che il tag unico apparso nel database. Ho scritto questo codice:

Es:

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

Questo produce il risultato corretto:

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

Come posso ottenere la piena COUNT di questa intera lista. La risposta dovrebbe essere 4 in questo caso perché ci sono naturalmente 4 righe. Non riesco a ottenere un COUNT() corretto senza che la dichiarazione fallisca.

Grazie mille per l'aiuto! :)

risposta

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

Grazie mille questo lo ha risolto, cavolo lo so che non ci ho nemmeno pensato. – ninu

+0

Allora sarò grato quindi accetti questo per rendermi membro 3k + SF ;-) – zerkms

+1

LO FACCIO! Inoltre, penso che tu sia confuso; questo upvote non cambierà affatto il tuo rappresentante su SF :) –

1

Usa COUNT DISTINCT(hashtag.tag_name) - non può andare nella stessa SELECT avete (se non con una UNION naturalmente), ma su una SELECT proprio (o un appropriato UNION) darà la risultato che vuoi

0

Non sono sicuro della query in my-sql ma questo funziona correttamente con Oracle.

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

Per farlo esattamente come si sta descrivendo (per ottenere il pieno conteggio della lista risultante), che ci si vuole prendere un conteggio dei risultati, come:

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) 

Ovviamente la clausola ORDER BY non è necessaria e viene inghiottita dall'aggregato esterno COUNT, così come il numero interno COUNT.

Inoltre, come alcune persone hanno fatto notare, la scorciatoia per questo è un COUNT DISTINCT, come in:

SELECT COUNT(DISTINCT hashtag.tag_name) 
FROM hashtag 

Questo può o non può utilizzare gli indici in modo più efficiente, a seconda se si rende conto che doesn' Devo contare tutto o no. Qualcuno con più conoscenza, non esitate a commentare (o semplicemente provare un paio EXPLAIN s).