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



## skippy3 (12. Oktober 2009)

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?


----------



## teefit (12. Oktober 2009)

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


----------



## skippy3 (12. Oktober 2009)

Hallo teefit,



teefit hat gesagt.:


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



teefit hat gesagt.:


> , 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?


----------



## teefit (12. Oktober 2009)

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


----------



## skippy3 (12. Oktober 2009)

teefit hat gesagt.:


> 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


----------



## teefit (13. Oktober 2009)

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?


----------



## Buschiii (13. Oktober 2009)

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


----------



## skippy3 (13. Oktober 2009)

teefit hat gesagt.:


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



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


----------



## skippy3 (13. Oktober 2009)

Buschiii hat gesagt.:


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



Wenn's so einfach wäre könnte ich das auch )
Die Abfrage macht mir noch ziemlich Probleme


----------



## teefit (14. Oktober 2009)

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"


----------



## skippy3 (14. Oktober 2009)

teefit hat gesagt.:


> Was ist das für ein Feldtyp?
> Integer?
> 
> steht bei Punkte Heim 3 oder 3:0 ?
> ...



Feldtyp ist INT
Punkte Heim ist 3

Irgendwie blicke ich das System nicht. Mal ein Beispiel für das Ergebnis das rauskommen soll:
	
	
	



```
Teams             Pkt.  Spiele   Sätze
1 Mannschaft1     26:4  100:61   230:164
2 Mannschaft2     24:6   90:71   208:178
3 Mannschaft3     14:16  77:85   178:212
4 Mannschaft4     12:18  87:77   185:158
5 Mannschaft5      8:22  69:92   179:203
6 Mannschaft6      6:24  63:99   164:225
```


----------



## teefit (14. Oktober 2009)

Select distinct(Mannschaft) as Teams,  sum(Punkte_Heim) as Heim, ':' as I, sum(Punkte_Gast) as Gast from Tabelle group by Mannschaft order by Heim desc


----------

