Aus 2 Spalten den kleinsten wert selektieren



  • Hallo!
    Ich habe eine Tabelle mit 2 spalten von Typ float.
    Nun möchte ich eine view erstellen die diese 2 spalten zu einer spalte kombiniert, so, dass immer der kleinste wert genommen wird.

    Ich mach am besten ein beispiel:

    Ursprüngliche Tabelle:

    Spalte1, Spalte2
    0 9
    1 8
    2 7
    3 6
    4 5
    5 4
    6 3
    7 2
    8 1
    9 0

    Das view soll so ausshen:

    Spalte
    0
    1
    2
    3
    4
    4
    3
    2
    1
    0

    Also sowas wie: "SELECT Spalte1 WENN Spalte1<Spalte2 Sonst Spalte2"



  • Hallo,

    wenn ich dich richtig verstehe suchst du eine SELECT-Anweisung wie diese:

    SELECT MIN(col1, col2) AS MinValue FROM mytable
    

    Ist dir damit geholfen?



  • Mein SQL server gibt folgende Fehlermeldung für folgende query aus:

    query:
    SELECT MIN(T1, T2) AS MinValue FROM data;
    Fehler:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' T2) AS MinValue FROM data' at line 1

    Aber MIN gibt ja das Minimum der gesamten spalte aus oder?



  • Probiere mal

    SELECT IF(col1 < col2, col1, col2) AS MinValue FROM data;
    


  • IF CASE WHEN ist das Stichwort.
    Such mal beim Suchmaschinenbetreiber danach.
    Auch MySQL kann das



  • SELECT FIRST 100 (CASE WHEN t1 > t2 THEN t2 ELSE t1 END) FROM mytable
    

    sorry, bin sqlite verwöhnt...



  • Cool nun gehts! Danke Euch!
    Nun habe ich die (oder das?) View.
    Da hätte ich noch eine Frage zu geschwindigkeit.
    Solche Views sind ja sozusagen virtuelle Tabellen. Wenn die Datenbank die ich benutze um das (oder die?) View zu generieren sehr viele einträge hat, wird es länger dauern die datensätze über view abzufragen? Vielleicht sollte ich dann lieber extra eine Tabelle dafür machen.



  • Eine Sicht (englisch, SQL: View) ist eine logische Relation (auch virtuelle Relation oder virtuelle Tabelle) in einem Datenbanksystem. Diese logische Relation wird über eine im Datenbankmanagementsystem (DBMS) gespeicherte Abfrage definiert. Der Datenbankbenutzer kann eine Sicht wie eine normale Tabelle abfragen. Wann immer eine Abfrage diese Sicht benutzt, wird diese zuvor durch das Datenbankmanagementsystem berechnet. Eine Sicht stellt im Wesentlichen einen Alias für eine Abfrage dar.

    Quelle: http://de.wikipedia.org/wiki/Sicht_(Datenbank)

    D. h. je nach DBMS wird die View bei jeder Abfrage neu erstellt. Hmm, wird sich wohl ziemlich auf die Performance auswirken mit mehreren Millionen Datensätzen 🙄



  • Normalerweise wird das SQL der View in das SQL der Anfrage eingemengt. Also wenn eine View existiert

    CREATE VIEW myview AS SELECT * FROM mytable WHERE mycolumn > 100;
    

    und die Anfrage dann

    SELECT mycolumn FROM myView;
    

    entsteht daraus intern

    SELECT mycolumn FROM mytable WHERE mycolumn > 100;
    

    Du kannst es hier für Mysql nachlesen: http://dev.mysql.com/doc/refman/5.5/en/view-algorithms.html
    Ich würde an deiner Stelle erst einmal mit der View gehen, Zwischentabellen kannst du immer noch bauen wenn es zuviel werden sollte.


Anmelden zum Antworten