Bei der Analyse von Daten ist es oft hilfreich, die Zeilen auf eine bestimmte Weise zu sortieren. In diesem Artikel zeige ich anhand mehrerer Beispiele, wie SQL ORDER BY Daten nach einer oder mehreren Spalten in aufsteigender oder absteigender Reihenfolge sortiert.
Einführung in ORDER BY
Standardmäßig ist die Reihenfolge der Zeilen in der Ausgabe einer SQL-Abfrage willkürlich. Wenn Sie die Ausgabe in einer bestimmten Reihenfolge sortieren möchten, müssen Sie das Schlüsselwort ORDER BY
verwenden. Die Zeilen werden nach einer oder mehreren Spalten sortiert, die in der ORDER BY
Klausel angegeben sind. Wenn Sie nichts anderes angeben, sortiert ORDER BY
die Daten in aufsteigender Reihenfolge.
Schauen wir uns ein Beispiel an, um die Syntax von ORDER BY
zu verstehen. Wir haben die folgende Tabelle mit grundlegenden Informationen über mehrere berühmte Filme.
movies | |||
id | title | director | production_year |
1 | Psycho | Alfred Hitchco*ck | 1960 |
2 | Midnight in Paris | Woody Allen | 2011 |
3 | Sweet and Lowdown | Woody Allen | 1993 |
4 | Talk to Her | Pedro Almodóvar | 2002 |
5 | The Skin I Live in | Pedro Almodóvar | 2011 |
Unsere erste Aufgabe besteht darin, diese Zeilen nach dem Produktionsjahr zu sortieren, beginnend mit dem frühesten Film. Bei numerischen Daten bedeutet aufsteigende Reihenfolge, dass von der kleinsten Zahl zur größten sortiert wird, und absteigende Reihenfolge bedeutet, dass von der größten Zahl zur kleinsten sortiert wird. Da wir wollen, dass der älteste Film an erster Stelle steht, müssen wir die Ausgabe in aufsteigender Reihenfolge sortieren. Dies ist die Standardreihenfolge bei der Verwendung von ORDER BY
, aber wir können die Reihenfolge auch mit dem Schlüsselwort ASC
festlegen.
So sortiert SQL ORDER BY die Tabelle movie
Tabelle nach Produktionsjahr in aufsteigender Reihenfolge:
Um die Ausgabe mit ORDER BY
zu sortieren, müssen Sie nur:
- Setzen Sie das Schlüsselwort
ORDER BY
an das Ende der Abfrage. - Anschließend geben Sie den Namen der Spalte an, nach der Sie sortieren möchten.
- Geben Sie das Schlüsselwort
ASC
oderDESC
für aufsteigende bzw. absteigende Reihenfolge an. Dies ist optional.
Im obigen Beispiel haben wir das Ergebnis nach dem Produktionsjahr sortiert, beginnend mit dem frühesten Film. Können Sie nun eine SQL-Abfrage schreiben, um die Ausgabe nach dem Produktionsjahr zu sortieren, aber beginnend mit dem neuesten Film?
Die Antwort zeige ich weiter unten, aber jetzt können Sie sich selbst testen und eine SQL-Abfrage schreiben, um die folgende Ausgabe zu erhalten:
id | title | director | production_year |
---|---|---|---|
2 | Midnight in Paris | Woody Allen | 2011 |
5 | The Skin I Live in | Pedro Almodóvar | 2011 |
4 | Talk to Her | Pedro Almodóvar | 2002 |
3 | Sweet and Lowdown | Woody Allen | 1993 |
1 | Psycho | Alfred Hitchco*ck | 1960 |
Und hier ist die Abfrage:
SELECT *FROM moviesORDER BY production_year DESC;
Wir haben einfach das Schlüsselwort ASC
durch das Schlüsselwort DESC
ersetzt, um die Reihenfolge von aufsteigend zu absteigend zu ändern. Ziemlich einfach, oder?
Um praktische Erfahrungen mit ORDER BY
zu sammeln, besuchen Sie unseren interaktiven SQL für Anfänger Kurs.
Sehen wir uns nun weitere Beispiele für die Verwendung von ORDER BY
in verschiedenen Szenarien an.
ORDER By mit Textdaten
Ordnen wir die movies
Tabelle nach dem Filmtitel in umgekehrter alphabetischer Reihenfolge. Bei Textdaten bedeutet aufsteigende Reihenfolge, dass in alphabetischer Reihenfolge (A-Z) sortiert wird, und absteigende Reihenfolge bedeutet, dass in umgekehrter alphabetischer Reihenfolge (Z-A) sortiert wird. Unsere SQL-Abfrage lautet also wie folgt:
SELECT *FROM moviesORDER BY title DESC;
id | title | director | production_year |
---|---|---|---|
2 | Midnight in Paris | Woody Allen | 2011 |
5 | The Skin I Live in | Pedro Almodóvar | 2011 |
4 | Talk to Her | Pedro Almodóvar | 2002 |
3 | Sweet and Lowdown | Woody Allen | 1993 |
1 | Psycho | Alfred Hitchco*ck | 1960 |
Wir haben in unserem Beispiel keine NULL-Werte, aber Sie können in diesem Artikel lernen, wie ORDER BY mit NULLs funktioniert.
ORDER BY Mehrere Spalten
Es kann vorkommen, dass Sie die Ausgabe einer Abfrage nach mehreren Spalten sortieren müssen. Dies ist sinnvoll, wenn die erste Spalte mehrere Zeilen mit denselben Werten enthält. Schauen wir uns an, wie das funktioniert.
In unserem nächsten Beispiel möchten wir die Filme (1) nach dem Namen des Regisseurs (in alphabetischer Reihenfolge) und (2) nach dem Produktionsjahr (beginnend mit dem neuesten Film) sortieren. In Anbetracht der Art und Weise, wie ORDER BY
mit den numerischen und Textdaten arbeitet, sortieren wir die Ergebnismenge nach der Spalte director
in aufsteigender Reihenfolge und dann nach production_year
in absteigender Reihenfolge:
SELECT *FROM moviesORDER BY director ASC, production_year DESC;
id | title | director | production_year |
---|---|---|---|
1 | Psycho | Alfred Hitchco*ck | 1960 |
5 | The Skin I Live in | Pedro Almodóvar | 2011 |
4 | Talk to Her | Pedro Almodóvar | 2002 |
2 | Midnight in Paris | Woody Allen | 2011 |
3 | Sweet and Lowdown | Woody Allen | 1993 |
Wie erwartet, beginnt die Ergebnismenge mit einem Film von Alfred Hitchco*ck, dessen Name in alphabetischer Reihenfolge an erster Stelle steht. Dann folgen zwei Filme von Pedro Almodóvar, dessen Name in alphabetischer Reihenfolge an zweiter Stelle steht. Die Filme von Pedro Almodóvar sind dann nach dem Produktionsjahr sortiert, wobei der Film aus dem Jahr 2011 an erster und der Film aus dem Jahr 2002 an zweiter Stelle steht. Die Tabelle endet mit den Filmen von Woody Allen, ebenfalls sortiert vom neuesten bis zum ältesten. Das ist die Reihenfolge, nach der wir gesucht haben.
ORDER BY in komplexen SQL-Abfragen
Wenn Sie eine SQL-Abfrage mit mehreren Klauseln haben, die Daten verbinden, gruppieren und filtern, ist es wichtig, die ORDER BY-Klausel ganz ans Ende der Abfrage zu setzen.
Nehmen wir zum Beispiel an, dass wir die Namen von Regisseuren mit mehr als einem Film in alphabetischer Reihenfolge abfragen möchten. Hier ist die zu verwendende Abfrage:
SELECT director, count(title) AS number_of_moviesFROM moviesGROUP BY directorHAVING count(title) > 1ORDER BY director;
In dieser Abfrage gruppieren wir zunächst die Daten, filtern dann die Gruppen nach unserer Bedingung ( > 1 Film) und sortieren schließlich die Ergebnismenge nach der Spalte director
(standardmäßig in aufsteigender Reihenfolge).
Hier ist das gesuchte Ergebnis:
director | number_of_movies |
---|---|
Pedro Almodóvar | 2 |
Woody Allen | 2 |
Zusammenfassung von SQL ORDER BY
Die folgenden Regeln fassen die wichtigsten Konzepte für die Verwendung von ORDER BY
zusammen:
ORDER BY
ORDER BY wird immer an das Ende der Abfrage gesetzt. Klauseln wieFROM
,WHERE
,GROUP BY
,HAVING
, usw. sollten vor dem SchlüsselwortORDER BY
stehen.- Um die Ausgabe in aufsteigender Reihenfolge zu sortieren, können Sie das Schlüsselwort
ASC
hinter den Spaltennamen setzen. Dies ist jedoch optional, da standardmäßig in aufsteigender Reihenfolge sortiert wird. - Um die Ausgabe inabsteigender Reihenfolge zu sortieren, setzen Sie das Schlüsselwort
DESC
hinter den Spaltennamen. - Um die Ausgabe nach mehreren Spalten zu sortieren, geben Sie einfach die Spaltennamen im Feld
ORDER BY
Die Ergebnismenge wird nach der ersten Spalte sortiert; wenn es mehrere Zeilen mit demselben Wert in der ersten Spalte gibt, werden die Zeilen nach der zweiten Spalte sortiert usw. - Wenn Sie nach mehreren Spalten sortieren, können Sie die Schlüsselwörter
ASC
undDESC
hinter jeden der Spaltennamensetzen . Mit anderen Worten, Sie können innerhalb derselben Abfrage einige Spalten in aufsteigender Reihenfolge und einige Spalten in absteigender Reihenfolge sortieren.
Dies sind die Grundregeln für die Verwendung der ORDER BY
Klausel. Wenn Sie mehr über fortgeschrittene Verwendungen erfahren möchten, wie z. B. das Einfügen von Ausdrücken in ORDER BY
, lesen Sie diesen umfassenden Leitfaden.
Zeit, SQL ORDER BY zu üben!
Sie haben gelernt, wie SQL ORDER BY
funktioniert; jetzt ist es an der Zeit, Ihr neues Wissen in die Praxis umzusetzen. Ich empfehle Ihnen, mit dem Kurs LearnSQL.de SQL für Anfänger zu beginnen, der alle grundlegenden SQL-Konzepte abdeckt und eine Reihe von interaktiven Übungen zum Sortieren von Zeilen mit ORDER BY
enthält.
Weitere Übungen finden Sie in unserem SQL-Übungssatz. Dieser Kurs testet die grundlegenden SQL-Kenntnisse mit mehreren Übungen zur Datenaggregation, Gruppierung, Filterung und natürlich zur Sortierung.
SQL zu lernen sollte nicht schwierig sein. Lernen Sie mit Spaß!