2009-08-01 9 views
22

Mon tableau comporte deux colonnes: id et name. Les données ressemble à ceci:Sélectionnez les meilleurs résultats distincts classés par fréquence

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

Ce que je veux obtenir est la suivante:

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

Essentiellement, j'ai besoin d'une requête SQL qui compte les noms uniques dans le tableau, et les trie par leur frequnecy . J'utilise MySQL si c'est important.

Merci.

Répondre

25

Je ne l'ai pas testé, donc la syntaxe peut-être pas parfait, mais ce quelque chose comme ceci:

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

devrait vous donner des noms uniques et le nombre correspondant de temps ils appeat dans le tableau, commandé par ce nombre

+1

Cela a fonctionné. Merci beaucoup. –

+1

Vous êtes les bienvenus :-) –

+0

Juste une petite clause d'ordre d'addition peut être comme "ordre par fréquence desc" ainsi – Elnoor

13

Vous devez utiliser un GROUP BY:

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

Ce sera GROUP BYname (toute non globale colonnes doit être nommé dans la clause GROUP BY) puis COUNT la fréquence de chaque name.

Si vous ne souhaitez que le top 25, vous pouvez passer à ajouter une clause LIMIT en tant que tel:

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

Plus d'informations sur la clause GROUP BY est disponible dans le manuel MySQL:

12.2.8 SELECT Syntax

+0

Merci, Andrew. Très gentil de ta part. –

Questions connexes