Paul1: SQL Abfrage: Sortieren nach höchstem Wert aus drei Spalten

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?

  1. 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():

    SELECTFROM tabelle ORDER BY GREATEST(x, y, z)
    

    Gruß
    Tobias

    1. 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

      --
      sumpsi - posui - obstruxi
      1. 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

      2. 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

    2. Vielen Dank, funktioniert wunderbar!

      Versuch es mal mit der Funktion GREATEST():

      SELECTFROM tabelle ORDER BY GREATEST(x, y, z)
      

      Gruß
      Tobias