Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Order By mit 2 Parametern

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Bazilinho, 4 Februar 2013.

  1. Bazilinho

    Bazilinho Neuer Benutzer

    Hi, kann mir bitte jemand helfen wie ich das ORDER BY in einer MySQL-View mit 2 Parametern richtig hinbekomme?
    Ich werde noch bekloppt...

    Ich habe folgendes Szenario: Ich habe (aus historischen Gründen) 3 Tabellen, die von der Struktur her zu 100% identisch sind.Allerdings möchte ich mir in einer VIEW das Ergebnis aller dieser Tabellen ansehen.

    Ich verkürze das der Einfachheit halber auf die 2 Spalten, deren Parameter für das ORDER BY wichtig sind.

    (Spalte 1 =) Destination, (Spalte 2 =) aufsummierter Wert
    Tabelle 1)

    Deutschland, 500
    England, 400
    Italien, 200


    Tabelle 2)

    Deutschland, 600
    England, 100
    Italien, 100

    Tabelle 3)

    Deutschland, 700
    England, 550
    Italien, 50

    Jetzt habe ich für dieVIEW einzelne SELECTS erstellt, die mit UNION ALL verbunden sind. Ich möchte alle Werte angezeigt bekommen. Zunächst den Wert mit dem höchstem aufsummierten Wert, dann alle dazugehörigen Werte dieser Destinationen.

    Das Wunschresultat wäre bei dem Bsp. oben also

    Deutschland, 700
    Deutschland, 600
    Deutschland, 500

    England, 550
    England, 400
    England, 100

    Italien, 200
    Italien, 100
    Italien, 50

    Ich habe folgendes ORDER BY in meine Query eingebaut:

    ORDER BY `aufsummierter Wert` DESC, `destination`


    Mein Ergebnis ist dann allerdings:

    Deutschland, 700
    Deutschland, 600
    England, 550
    Deutschland, 500
    England, 400
    ....

    Ich wäre Euch echt super dankbar wenn Ihr mir hier irgendwie helfen könntet...
    Vielen Dank schonmal!!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    works for me:

    Code:
    test=*# select * from t1;
        land     | punkte    
    -------------+--------
     deutschland |    500
     england     |    400
     italien     |    200
    (3 rows)
    
    Time: 0,173 ms
    test=*# select * from t2;
        land     | punkte
    -------------+--------
     deutschland |    600
     england     |    100
     italien     |    100
    (3 rows)
    
    Time: 0,155 ms
    test=*# select * from t3;
        land     | punkte
    -------------+--------
     deutschland |    700
     england     |    550
     italien     |     50
    (3 rows)
    Time: 0,170 ms
    test=*# select * from t1 union all select * from t2 union all select * from t3 order by land, punkte desc;
        land     | punkte
    -------------+--------
     deutschland |    700
     deutschland |    600
     deutschland |    500
     england     |    550
     england     |    400
     england     |    100
     italien     |    200
     italien     |    100
     italien     |     50
    (9 rows)
    
    Ist zwar PostgresQL, sollte MySQL aber exakt auch so bringen.


    Andreas
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Ich sehe jetzt auch Deinen Fehler. Du auch?

    Andreas
     
  4. Bazilinho

    Bazilinho Neuer Benutzer

    Hmm.. Vermutlich meinst Du die Reihenfolge in der ich die ORDER BY Paramter angeführt habe...?
    Aber erstmal vielen Dank für Deine Antwort!!!

    Da hab ich dann aber wohl das Bsp. doof gewählt. SRY! Dann nehmen wir als Beispiel doch besser Spanien statt Deutschland.

    Dann wäre das Ergebnis :

    England, 550
    England, 400
    England, 100

    Italien, 200
    Italien, 100
    Italien, 50

    Spanien, 700
    Spanien, 600
    Spanien, 500

    ==> aber auch da hätte ich dann gerne Spanien ganz oben.. ;-)
     
  5. akretschmer

    akretschmer Datenbank-Guru


    Wird a bissl frickelig ...

    Code:
    test=*# select bla.* from (select * from t1 union all select * from t2 union all select * from t3 order by land, punkte desc) bla left join (select land, max(punkte) from (select * from t1 union all select * from t2 union all select * from t3) foo group by land order by max desc) blub on bla.land=blub.land order by blub.max desc, punkte desc;
      land   | punkte
    ---------+--------
     spanien |    700
     spanien |    600
     spanien |    500
     england |    550
     england |    400
     england |    100
     italien |    200
     italien |    100
     italien |     50
    (9 rows)
    
    Andreas
     
    ukulele gefällt das.
  6. Bazilinho

    Bazilinho Neuer Benutzer

    ... in der Tat.. :)

    Aber es funzt!!!! Super vielen Dank!!! ;)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden