[MYSQL] Summe über 2 Spalten und anschließende Sortierung

skippy3

Mitglied
Hallo miteinander,

ich habe mir eine Datenbank zur Ergebnisverwaltung angelegt. Das eingeben/ändern der Daten funktioniert problemlos.

Allerdings hänge ich im Moment an einer Abfrage. Die Felder sind:
'saison' - 'klasse' - 'spieltag' - 'spieldatum' - 'spielnummer' - 'mannschaft_heim' -
'mannschaft_gast' - 'punkte_heim' - 'punkte_gast' - 'spiele_heim' - 'spiele_gast' -
'saetze_heim' - 'saetze_gast'

Jede Mannschaft spielt 2x gegeneinander (Heim und Gast).

Ich suche nach einer Abfrage um für jede Mannschaft die Werte "punkte/spiele/saetze heim" und "punkte/spiele/saetze gast" zu addieren und anschließend zu sortieren.

Als erstes die Mannschaft mit den meisten Punkten gewonnen, bei Gleichheit die wenigsten Punkte verloren usw. z. B.
mannschaft1 3:0 25:13 100:36
mannschaft2 3:3 28:14 110:75
mannschaft3 3:3 30:12 108:83

Hat jemand eine Idee wie das zu lösen ist?
 
Hallo

Also Manschaft mit Punkten bekommst du über sum, aber was genau ist mit wenigsten punkte verloren gemeint.

Select Mannschaft, (Sum(punkte_heim)+sum(punkte_gast)) as Punktestand from Tabelle group by Mannschaft order by Punktestand DESC
 
Hallo teefit,

Hallo

Also Manschaft mit Punkten bekommst du über sum

Select Mannschaft, (Sum(punkte_heim)+sum(punkte_gast)) as Punktestand from Tabelle group by Mannschaft order by Punktestand DESC

Anders ausgedrückt, es spielen alle Mannschaft gegeneinander (bei 7 Mannschaften 42 Spiele, für jede Mannschaft 6 x Heim und 6 x Gast).

Es müßte vermutlich für jede Mannschaft erst errechnet werden wieviele Punkte insgesamt und anschließend sortiert.

, aber was genau ist mit wenigsten punkte verloren gemeint.

mannschaft1 3:0 25:13 100:36
mannschaft2 3:3 28:14 110:75
mannschaft3 3:3 27:12 108:83

3:0 kommt vor 3:3
28:14 kommt vor 27:12

Ich hoffe mein Problem ist verständlich?
 
hi skippy.

leider nein...

1)Select Mannschaft, (Sum(punkte_heim)+sum(punkte_gast)) as Punktestand from Tabelle group by Mannschaft order by Punktestand DESC

macht ja genau was du möchtest.
es zählt spalte punkte heim und punkte gast zusammen (über sum) als eigene Spalte Punktestand.
nach der wird dann sortiert.

aber die Punkte müssen auch Zahlen sein ( zum zählen)

also 3+0+1+0+3+1+1 = Punktestand 9

3:0 plus 0:1 kann man nicht zählen, also man schon, aber datenbank nicht, bzw nur sehr kompliziert

(trennen beim doppelpunkt, linke hälfte als int, rechte hälfte als int usw...)
 
hi skippy.

es zählt spalte punkte heim und punkte gast zusammen (über sum) als eigene Spalte Punktestand.
nach der wird dann sortiert.

Dann kriege ich aber nur die Pluspunkte und nicht die Minuspunkte (ich weiß nicht wie ich das anders formulieren soll)

Der Punktestand ergibt sich immer aus Plus : Minus

Heim - Gast 3 : 0
Heim = 3 : 0
Gast = 0 : 3

Heim - Gast 2 : 1
Heim = 2 : 1
Gast = 1 : 2
 
Hallo Skippy.

Ich verstehe ja was du möchtest:
die mit den meisten gewonnenen oben, die mit den meisten verloren unten.

Aber wie gesagt, du musst zählen, also brauchst du Zahlen

dein Beispiel funktionier so nicht, es gibt keine negativzahlen darin!

Heim - Gast 3 : 0
Heim = 3 : 0
Gast = 0 : 3

ist nicht richtig, der doppelpunkt steht für den Bindestrich in Heim - Gast 3 : 0

Also
Heim - Gast 3 : 0
bedeutet
Heim = 3
Gast = 0


Wenn bei dir in der Tabelle bei Heim 3:0 statt 3 und bei Gast 0:3 statt 0 steht, dann kannst du das mit einer "einfachen" Abfrage vergessen. Wie soll denn das ergebnis von TEXT(3:0) minus TEXT(0:3) aussehen?

d.h. du musst jeden wert aufwändig trennen, dann in eine Zahl umwandeln. Dann kannst du damit rechnen.

Wenn ich dich richtig verstehe. möchtest du warum auch immer zusätzlich zu den Pluspunkten die Pluspunkte der Gegner nochmal abziehen?

Also 3:0 =

Heim: 3 Pluspunkte - 0 Minuspunkte = 3
Gast: 0 Pluspunkte - 3 Minuspunkte = -3

korrekt?
 
Du brauchst die Punkte nicht voneinander abzuziehen, du kannst (solange beide integer sind) einfach über beide Punkte sortieren...Zunächst sortierst du nach den gewonnenen Punkten...diese sortierst du abwärts...danach sortierst du über die verlorenen Spiele aufwärts und schon haste die richtige Sortierung...

Wie du das ganze nachher anzeigen lässt, also:

Zusammengesetzt aus den beiden Werten

Wert1 : Wert2 also: 2:3

oder voneinander abgezogen

Wert1 - Wert2 also: -1

....das lässt sich ja alles machen...wichtig ist nur die aufteilung der Werte...
 
Hallo Skippy.

Ich verstehe ja was du möchtest:
die mit den meisten gewonnenen oben, die mit den meisten verloren unten.

Aber wie gesagt, du musst zählen, also brauchst du Zahlen

dein Beispiel funktionier so nicht, es gibt keine negativzahlen darin!

Heim - Gast 3 : 0
Heim = 3 : 0
Gast = 0 : 3

ist nicht richtig, der doppelpunkt steht für den Bindestrich in Heim - Gast 3 : 0

Also
Heim - Gast 3 : 0
bedeutet
Heim = 3
Gast = 0


Wenn bei dir in der Tabelle bei Heim 3:0 statt 3 und bei Gast 0:3 statt 0 steht, dann kannst du das mit einer "einfachen" Abfrage vergessen. Wie soll denn das ergebnis von TEXT(3:0) minus TEXT(0:3) aussehen?

d.h. du musst jeden wert aufwändig trennen, dann in eine Zahl umwandeln. Dann kannst du damit rechnen.

Wenn ich dich richtig verstehe. möchtest du warum auch immer zusätzlich zu den Pluspunkten die Pluspunkte der Gegner nochmal abziehen?

Also 3:0 =

Heim: 3 Pluspunkte - 0 Minuspunkte = 3
Gast: 0 Pluspunkte - 3 Minuspunkte = -3

korrekt?

Die Felder in der Datenbank sind schon getrennt, punkte_heim und punkte_gast sind eigene Felder.

Die Punkte sollen nicht gegengerechnet werden sondern in beiden Feldern addiert werden.

3 zu 0 bedeutet nicht 3 Punkte Plus sondern
3 Punkte bei gewonnen und 0 Punkte bei verloren

Das Problem ist, dass das Ergebnis doppelt gerechnet werden muß.
3 zu 0 =
Heim 3 Punkte bei gewonnen und 0 Punkte bei verloren
Gast 0 Punkte bei gewonnen und 3 Punkte bei verloren
 
Du brauchst die Punkte nicht voneinander abzuziehen, du kannst (solange beide integer sind) einfach über beide Punkte sortieren...Zunächst sortierst du nach den gewonnenen Punkten...diese sortierst du abwärts...danach sortierst du über die verlorenen Spiele aufwärts und schon haste die richtige Sortierung...

Wie du das ganze nachher anzeigen lässt, also:

Zusammengesetzt aus den beiden Werten

Wert1 : Wert2 also: 2:3

oder voneinander abgezogen

Wert1 - Wert2 also: -1

....das lässt sich ja alles machen...wichtig ist nur die aufteilung der Werte...

Wenn's so einfach wäre könnte ich das auch :))
Die Abfrage macht mir noch ziemlich Probleme
 
Was ist das für ein Feldtyp?
Integer?

steht bei Punkte Heim 3 oder 3:0 ?

Wie gesagt, es müssen Zahlen sein, dann geht etwas wie

"Select distinct(Mannschaft) as name, (Sum(Punkte_Heim) - Sum(Punkte_Gast)) as punkte group by Mannschaft order by punkte desc"
 

Neue Beiträge

Zurück