2010-11-19 3 views
0

Censé le tableau suivant:MySQL: sélectionner des lignes Ordonné par la fréquence de la valeur

People 
--------------------------- 
id | First Name | Last Name 

Comment pourrais-je sélectionner les lignes les plus fréquents affichés par ordre des prénoms?

+0

Avez-vous seulement besoin des prénoms, ou avez-vous besoin de tous les enregistrements, montrant les enregistrements avec les prénoms les plus fréquents en premier? –

Répondre

2
select 
    count(firstname) as countFn, 
    firstname 
from people 
group by firstname 
order by countFn desc 

modifier: id et nom retiré de sélection

+0

Cela ne fonctionnera pas, id et lastname ne peuvent pas être dans la clause SELECT car ils ne font pas partie de la clause GROUP BY. –

+0

@Martin: Ceci est MySQL, ils permettent ce comportement non-standard. http://dev.mysql.com/doc/refman/5.0/fr/group-by-hidden-columns.html –

+0

@Peter Merci, je ne le savais pas. Quote: "Le serveur est libre de renvoyer n'importe quelle valeur du groupe, donc les résultats sont indéterminés, sauf si toutes les valeurs sont les mêmes". Dans ce cas, la requête de cette réponse renvoie un identifiant aléatoire et un nom de famille pour chaque prénom. Brrrrr, c'est effrayant. –

0

Si vous avez besoin de voir tous les noms classés par le nombre de prénoms par ordre décroissant, puis pour Oracle cela fonctionnera:

select n.firstname, n.lastname, g.count 
from 
people n, (select firstname, count(*) count from people group by firstname) g 
where n.firstname=g.firstname 
order by g.count desc 

Vous ne savez pas comment cela fonctionne par exemple MySql.

1
select p.*, t.count 
from people p 
, (select FirstName, count(1) as count 
    from people 
    group by FirstName) t 
where p.FirstName = t.FirstName 
order by t.count desc; 
Questions connexes