Order By mit 2 Parametern

Bazilinho

Neuer Benutzer
Beiträge
3
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!!
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.173
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!!

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
 

Bazilinho

Neuer Benutzer
Beiträge
3
Ich sehe jetzt auch Deinen Fehler. Du auch?

Andreas

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.. ;-)
 

akretschmer

Datenbank-Guru
Beiträge
9.173
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.. ;-)


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
 
Werbung:
Oben