2010-11-19 8 views
0

Vermeintliche die folgende Tabelle:MySQL: Auswählen von Zeilen nach Häufigkeit der Wert BESTELLT

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

Wie kann ich die Zeilen SELECT ordered by häufigsten Vornamen?

+0

Benötigen Sie nur die Vornamen, oder benötigen Sie alle Datensätze, wobei Datensätze mit den häufigsten Vornamen zuerst angezeigt werden? –

Antwort

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

bearbeiten: id und Nachname von ausgewählten

+0

Dies funktioniert nicht, ID und Nachname können nicht in der SELECT-Klausel enthalten sein, da sie nicht Teil der GROUP BY-Klausel sind. –

+0

@Martin: Dies ist MySQL, sie erlauben dieses Nicht-Standard-Verhalten. http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html –

+0

@Peter Danke, wusste das nicht. Quote: "Der Server kann einen beliebigen Wert aus der Gruppe zurückgeben, daher sind die Ergebnisse unbestimmt, wenn nicht alle Werte gleich sind". In diesem Fall würde die Abfrage in dieser Antwort eine zufällige ID und einen Nachnamen für jeden firstName zurückgeben. Brrrrr, das ist gruselig. –

0

Im Falle entfernt man alle Namen durch die Anzahl der Vornamen sortiert sehen müssen in absteigender Reihenfolge, dann für Oracle dies funktionieren wird:

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 

Nicht sicher, wie das mit zB funktioniert 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; 
Verwandte Themen