Ich versuche, eine MySQL-Abfrage zu finden, die DISTINCT-Werte in einem bestimmten Feld findet, die Anzahl der Vorkommen dieses Werts zählt und dann die Ergebnisse nach der Anzahl sortiert.
Beispiel db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
erwartetes Ergebnis
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
in einewhere
Klausel nicht werfen , da es sich um aggregierte Funktionen handelt. Sie erhalten auch eine sehr wenig hilfreiche Meldung: "Ungültige Verwendung der Gruppenfunktion." Der richtige Weg ist, die Anzahl zu aliasenname,COUNT(*) as cnt
und eine Klausel wie folgt hinzuzufügen :HAVING count > 1
.HAVING
gilt für Bedingungen, die nach der Aggregation angewendet werden sollen, während diesWHERE
für Bedingungen gilt, die davor angewendet werden sollen. (Eine andere Denkweise ist, dass diesWHERE
für die ursprünglichen ZeilendatenHAVING
gilt ; gilt für die Ausgabezeilendaten.)Was ist mit so etwas:
Sie wählen den Namen und die Häufigkeit seiner Anzeige aus, gruppieren ihn jedoch nach Namen, sodass jeder Name nur einmal ausgewählt wird.
Schließlich bestellen Sie nach der Häufigkeit in absteigender Reihenfolge, damit die am häufigsten auftretenden Benutzer an erster Stelle stehen.
quelle
SELECT COUNT(DISTINCT name) as count FROM your_table
für eine Anzahl der gesamten Zeilen der Tabelle, tut Pascals Abfrage ohne diegroup by
Aussage.Habe gerade Bernsteins COUNT (*) in COUNT (1) geändert, um eine bessere Leistung zu erzielen.
quelle