Database
 sql >> Datenbank >  >> RDS >> Database

Wie bestellt man nach Anzahl in SQL?

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