2009-08-28 26 views
159

Ich versuche, eine MySQL-Abfrage zu finden, die verschiedene Werte in einem bestimmten Feld finden wird, die Anzahl der Vorkommen dieses Werts zählen und dann die Ergebnisse nach der Anzahl ordnen.MySQL: Zählen Auftreten von verschiedenen Werten

Beispiel db

id   name 
-----  ------ 
1   Mark 
2   Mike 
3   Paul 
4   Mike 
5   Mike 
6   John 
7   Mark 

erwartete Ergebnis

name  count 
-----  ----- 
Mike  3 
Mark  2 
Paul  1 
John  1 

Dank

Antwort

317
SELECT name,COUNT(*) as count FROM tablename GROUP BY name ORDER BY count DESC; 
+1

Was genau macht die Gruppe hier? Es ist nicht klar, was Sinn ist? Es scheint, dass es ohne es funktionieren sollte, wenn Sie gerade es einfach lesen würden. – Prospero

+16

Während Ambers Frage die richtige Antwort für die Frage ist, möchte ich eine Korrektur an ihrem Kommentar vornehmen, um zu vermeiden, dass neue Leute in die Irre geführt werden. Wenn Sie die "Gruppierung nach" in einer MySQL-Abfrage verlassen, erhalten Sie nicht [Mike, 1], [Mike, 1], Sie erhalten ein einzelnes Ergebnis, das der Name in der ersten Zeile zurückgegeben wird, und Anzahl der Zeilen in der Tabelle, also in diesem Fall [Mark, 7]. count() agiert als Aggregatfunktion für das gesamte Dataset, wobei das angegebene Feld auf eine Zeile summiert, gezählt oder konkatiert wird. Gruppiert den Datensatz in Blöcke basierend auf eindeutigen Kombinationen der angegebenen Felder. –

+0

@Avatar_Squadron Ganz richtig; Ich habe den vorherigen Kommentar entfernt - es war von der Spitze meines Kopfes, und ich neige dazu, die Ergebnisse der Zählung ohne Gruppe tatsächlich viel zu beobachten. :) – Amber

9

was ist so etwas wie dieses:

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

dh Sie wählen den Namen und die Anzahl der Anzeigen aus; aber Gruppierung nach Namen, so dass jeder Name nur einmal ausgewählt wird.

Dann bestellen Sie nach Anzahl der Male, desc; damit die am häufigsten auftretenden Nutzer an erster Stelle stehen.

+0

Ihre Anfrage hat mir geholfen. Es gibt ein paar Zeilen als Ergebnis zurück. Ich wollte auch wissen, wie man das Ergebnis zählt. Einige Abfragen wurden versucht, aber es scheint nicht in der Lage zu sein, auf einem Aggregat zu zählen. Könntest du damit helfen? – Nav

+0

@Nav - eine Zählung von was? Die Anzahl der zurückgegebenen Zeilen? Das ist 'SELECT COUNT (DISTINCT-Name) als Anzahl FROM your_table' Für eine Zählung der gesamten Zeilen der Tabelle, führen Sie die Pascal-Abfrage ohne die Anweisung' group by' durch. –

+0

Was für ein Unterschied eine Minute macht! –

0

Nur Amber COUNT (*) zu COUNT (1) für die bessere Leistung geändert.

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC; 
Verwandte Themen