SQL-Blog

MariaDB, PostgreSQL, MySQL, … Erfahrungsberichte, Meinungen, …

Sortieren ja, aber ich entscheide wer an der Spitze steht

| Keine Kommentare

Stell dir vor, du sollst eine Liste mit MitarbeiterInnen ausgeben, die nach Nachnamen alphabetisch sortiert sein soll. Das ist ja kein Problem, ein ORDER BY nachname würde hier schon reichen. Nur der Chef ist so eitel, dass er natürlich an der Spitze der Liste stehen will.
Dafür zeige ich dir hier eine, oder besser gesagt zwei Lösungen.

Ausgangslage

Wir haben eine unsortierte Tabelle in der die Namen der MitarbeiterInnen gespeichert sind. Der erste Schritt die Namen einfach mit einem

ORDER BY nachname

zu sortieren ist dir vermutlich auch bekannt.

Ausgangsdaten

Ausgangsdaten

Ausgangsdaten sortiert nach Nachname

Ausgangsdaten sortiert nach Nachname

Die Person an der Spitze

Jetzt nehme ich einmal an, dass die Fr. Maria Meier die Chefin ist, die ich an der ersten Stelle der Liste positioniert haben will. Dafür habe ich grundsätzlich 2 Möglichkeiten.

Möglichkeit 1 ORDER BY erweitern

Meine erste Möglichkeit eine Tabelle mit Fr. Meier an erster Stelle und danach alle Personen in alphabetischer Reihenfolge zu bekommen besteht darin, dass ich den ORDER BY Teil in MySQL um ein IF erweitere, in PostgreSQL muss ich dafür ein CASE verwenden:

MySQL / MariaDB

SELECT * FROM testadressen

ORDER BY IF(nachname='Meier',0,1),nachname;

PostgreSQL

SELECT * FROM testadressen

ORDER BY CASE WHEN nachname='Meier' THEN 0

ELSE 1 END, nachname;

In beiden Fällen erzeugen wir eine ‚virtuelle‘ Spalte, die mit ‚0‘ und ‚1‘ befüllt wird und nach der danach sortiert wird und als 2. Suchkriterium gilt nach wie vor unsere Spalte ’nachname‘.

Sortierte Tabelle mit anderer Person an der Spitze

Sortierte Tabelle mit anderer Person an der Spitze

Natürlich kann die Bedingung im IF – Statement noch erweitert werden. Ich habe im Beispiel zwei Personen mit dem Nachnamen Huber und ich möchte die Eva Huber an die erste Stelle bringen, also schreibe ich:

SELECT * FROM testadressen

ORDER BY IF(nachname='Huber' AND vorname='Eva',0,1), nachname;
Erweiterung des IF - Statements

Erweiterung des IF – Statements

2. Möglichkeit die Sortierung von Daten zu beeinflussen

Als 2. Möglichkeit die Sortierung einer Datenbanktabelle zu beeinflussen habe ich noch die Möglichkeit eine eigene Spalte in der Tabelle anzulegen, die einzig und alleine der Sortierung dient.

Eigene Spalte zur Sortierung

Eigene Spalte zur Sortierung

Der Vorteil einer eigenen Spalte zur Sortierung liegt darin, dass ich mir damit beliebige Hierachien zu Sortierung aufbauen kann, die sich auch dann nicht ändern, wenn andere Daten wie z.B. der Name einer Person geändert wird.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.