SQL Abfrage: Sortieren nach höchstem Wert aus drei Spalten
Paul1
- datenbank
- sql
Hallo, ich möchte gerne meine Daten aus einer MySql-Datenbank auf folgende Weise sortieren: Es gibt drei Spalten, jeweils eine für Länge, Breite und Höhe. Die Einträge sollen nach Größe sortiert werden, wobei immer dee jeweils größte Wert aus einer der drei Spalten berücksichtigt wird. (Es kann z.B mal die Breite größer als die Höhe angegeben sein, in diesem Fall soll eben die Spalte „Höhe“ verglichen werden). Geht das direkt in SQL bzw. unterstützt MySQL die evtl. komplexere Abfrage? Oder ist es eh ganz banal und ich steh auf dem Schlauch?
Moin,
Hallo, ich möchte gerne meine Daten aus einer MySql-Datenbank auf folgende Weise sortieren: Es gibt drei Spalten, jeweils eine für Länge, Breite und Höhe. Die Einträge sollen nach Größe sortiert werden, wobei immer dee jeweils größte Wert aus einer der drei Spalten berücksichtigt wird.
Versuch es mal mit der Funktion GREATEST():
SELECT … FROM tabelle ORDER BY GREATEST(x, y, z)
Gruß
Tobias
Hallo tk,
GREATEST ist korrekt.
Wenn die Tabelle viele Rows hat, kann das aber zu massiven Strafsekunden führen. Wenn der ORDER BY zu lange dauert, könnte man versuchen, eine berechnete Spalte Laengste_Seite oder so einzuführen, die sich aus GREATEST(x,y,z) berechnet, und zwar als stored generated column. Dadurch muss der ORDER BY nicht für jede Zeile zunächst den größten Wert bestimmen, und wenn's echt brennt mit der Zeit, kann man damit sogar indexieren.
Rolf
Hallo Rolf,
Danke auch für diesen Tipp. In meinem Fall muss ich das nicht berücksichtigen - ich habe nur ca. 300 Reihen...
Hallo tk,
GREATEST ist korrekt.
Wenn die Tabelle viele Rows hat, kann das aber zu massiven Strafsekunden führen. Wenn der ORDER BY zu lange dauert, könnte man versuchen, eine berechnete Spalte Laengste_Seite oder so einzuführen, die sich aus GREATEST(x,y,z) berechnet, und zwar als stored generated column. Dadurch muss der ORDER BY nicht für jede Zeile zunächst den größten Wert bestimmen, und wenn's echt brennt mit der Zeit, kann man damit sogar indexieren.
Rolf
Hi,
GREATEST ist korrekt.
Wenn die Tabelle viele Rows hat, kann das aber zu massiven Strafsekunden führen.
solange das nur im Order by steht, kommt es nicht auf die Anzahl der Zeilen in der Tabelle an - nur auf die Anzahl der Zeilen im Ergebnis.
cu,
Andreas a/k/a MudGuard
Vielen Dank, funktioniert wunderbar!
Versuch es mal mit der Funktion GREATEST():
SELECT … FROM tabelle ORDER BY GREATEST(x, y, z)
Gruß
Tobias