2009-08-01 14 views
22

La mia tabella ha due colonne: id e nome. I dati si presenta così:Selezionare i primi risultati distinti ordinati per frequenza

id | name 
---------- 
1 Jeff 
2 Sam 
3 Carl 
4 Sam 
5 Carl 
6 Jeff 
7 Dave 
8 Jeff 

Quello che voglio ottenere è questo:

name | frequency 
---------------- 
Jeff  3 
Carl  2 
Sam  2 
Dave  1 

In sostanza, ho bisogno di una query SQL che conta i nomi univoci all'interno della tabella, e le ordina dal loro frequnecy . Sto usando MySQL se è importante.

Grazie.

risposta

25

non ho ancora testato, quindi la sintassi potrebbe non essere perfetto, ma per quanto riguarda qualcosa di simile:

select name, count(*) as frequency 
from your_table 
group by name 
order by count(*) desc 

dovrebbe dare nomi univoci e il corrispondente numero di tempo che appeat nella tabella, richiesto, facendo quel numero

+1

Questo ha funzionato. Grazie mille. –

+1

Prego :-) –

+0

Solo una piccola clausola di ordine di addizione può essere come "ordine per frequenza desc" pure – Elnoor

13

È necessario utilizzare un GROUP BY:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC; 

Questo sarà GROUP BYname (qualsiasi non-aggregata le colonne devono essere denominate nella clausola GROUP BY e quindi COUNT la frequenza di ogni name.

Se si desidera solo la parte superiore 25, si può quindi procedere per aggiungere una clausola LIMIT come tale:

SELECT name, COUNT(*) as frequency 
FROM name_table 
GROUP BY name 
ORDER BY COUNT(*) DESC 
LIMIT 25; 

Maggiori informazioni sulla clausola di GROUP BY è disponibile nel manuale di MySQL:

12.2.8 SELECT Syntax

+0

Grazie, Andrew. Molto gentile da parte tua. –

Problemi correlati