Problem:
Sie haben Daten in Gruppen aggregiert, aber Sie möchten die Datensätze in absteigender Reihenfolge nach der Anzahl der Elemente in den Gruppen sortieren.
Beispiel:
Unsere Datenbank hat eine Tabelle namens user
mit Daten in den folgenden Spalten:id
, first_name
, last_name
und country
.
id | Vorname | Nachname | Land |
---|---|---|---|
1 | Lisa | Williams | England |
2 | Gary | Anders | Polen |
3 | Tom | Williams | Polen |
4 | Michael | Braun | Frankreich |
5 | Susanne | Smith | USA |
6 | Anne | Jones | USA |
7 | Ellie | Müller | Polen |
Lassen Sie uns einen Bericht über unsere Benutzer erstellen. Wir gruppieren die Ergebnisse nach country
und zählen Sie die Anzahl der Benutzer aus jedem Land. Aber wir werden die Gruppen auch in absteigender Reihenfolge nach der Anzahl der Benutzer sortieren. Auf diese Weise erscheinen die Länder mit den meisten Benutzern ganz oben.
Lösung:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id) DESC ;
Land | count(id) |
---|---|
Polen | 3 |
USA | 2 |
England | 1 |
Frankreich | 1 |
Diskussion:
Um die ausgewählten Datensätze nach der Anzahl der Elemente in jeder Gruppe zu sortieren, verwenden Sie den ORDER BY
Klausel.
Der erste Schritt ist die Verwendung von GROUP BY
-Klausel zum Erstellen der Gruppen (in unserem Beispiel gruppieren wir nach country
Säule). Dann verwenden Sie in der ORDER BY-Klausel die Aggregatfunktion COUNT, die die Anzahl der Werte in der Spalte Ihrer Wahl zählt; In unserem Beispiel zählen wir eindeutige IDs mit COUNT(id)
. Dies zählt effektiv die Anzahl der Elemente in jeder Gruppe. Der ORDER BY
-Klausel sortiert dann die Gruppen gemäß dieser Berechnung.
Wie üblich können Sie mit ORDER BY
sowohl aufsteigende als auch absteigende Reihenfolge verwenden . Wenn Sie eine absteigende Reihenfolge wünschen (wie in diesem Beispiel), verwenden Sie den DESC
Stichwort. Für die aufsteigende Reihenfolge ist kein Schlüsselwort erforderlich, da dies die Standardeinstellung ist, aber Sie können den ASC
verwenden Schlüsselwort, wenn Sie explizit sein möchten. Dies ist das gleiche Beispiel, aber mit aufsteigend sortierten Ergebnissen:
Lösung:
SELECT country, COUNT(id) FROM user GROUP BY country ORDER BY COUNT(id);
Hier ist das Ergebnis:
Land | count(id) |
---|---|
England | 1 |
Frankreich | 1 |
USA | 2 |
Polen | 3 |