2009-08-01 11 views
22

Meine Tabelle hat zwei Spalten: ID und Name. Die Daten sieht wie folgt aus:Wählen Sie nach oben eindeutige Ergebnisse nach Häufigkeit geordnet

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

Was will ich erhalten, ist dies:

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

Im Grunde brauche ich eine SQL-Abfrage, die die eindeutigen Namen in der Tabelle zählt und sortiert sie nach ihrer frequnecy . Ich verwende MySQL, wenn es darauf ankommt.

Vielen Dank.

Antwort

25

ich es nicht getestet, so dass die Syntax möglicherweise nicht perfekt sein, aber was ist das so etwas wie:

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

Sollten Sie einen eindeutigen Namen geben und die entsprechende Anzahl der Zeit, die sie in der Tabelle appeat, von dieser Nummer bestellt

+1

Dies funktionierte. Vielen Dank. –

+1

Gern geschehen :-) –

+0

Nur eine kleine Zusatzbestellungsklausel kann wie "order by frequency desc" auch sein – Elnoor

13

Sie benötigen ein GROUP BY zu verwenden:

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

Dies wird GROUP BYname (alle nicht-Aggregat Spalten müssen in der GROUP BY Klausel benannt werden) und dann COUNT die Häufigkeit von jedem name.

Wenn Sie nur die Top-25 wollen, können Sie dann gehen Sie eine LIMIT Klausel als solche hinzuzufügen:

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

Mehr Informationen über die GROUP BY Klausel ist in der MySQL-Manual:

12.2.8 SELECT Syntax

+0

Danke, Andrew. Sehr nett von Dir. –

Verwandte Themen