Struppi: GROUP BY mit mehreren Feldern

Beitrag lesen

erstmal danke für den Hinweis das hätte mich später sicher sehr verwirrt.

Funktioniert nicht. Kann gar nicht funktionieren.

so langsam merke ich das auch ;-)

und läßt sich eine Bedingung summieren?
in etwa so: count(s1 > s2)

Was soll das zusammenrechnen?

die Anzahl der Reihen, in denen s1 größer als s2 ist.

wie oft das feld s1 größer als das feld s2 ist.

SELECT COUNT(*) FROM tabelle WHERE s1 > s2;

klar allerdings das gruppiert mit feld_1 bzw. feld_2
also
SELECT COUNT(*), feld_1 FROM tabelle WHERE s1 > s2 GROUB BY feld_1;

feld_1 | feld_2 | s1 | s2
01       02       1   1
02       03       3   4
03       01       2   3
03       02       2   0

Die abfrage die funktionert sieht so aus:

SELECT *, sum(s1) AS anzahl from t GROUP BY feld_1

SELECT *, sum(s2) AS anzahl from t GROUP BY feld_2

Das sieht nur so aus, als würde es funktionieren. MySQL erlaubt dummerweise, dass man auch nicht mit Aggregatsfunktion oder un GROUP BY erwähnte Spalten selektieren kann, aber es ist im Grunde genommen ein Fehler, weil aus den infrage kommenden Zeilen eine beliebige ausgewählt wird - mithin also die nicht explizit festgelegten Zeilen Zufallsergebnisse enthalten!

Wenn du eine vernünftige Abfrage haben willst, dann geht sowas:

SELECT feld_1, sum(s1) AS anzahl FROM t GROUP BY feld_1;
SELECT feld_2, sum(s2) AS anzahl FROM t GROUP BY feld_2;

Das selektiert dir die Zahl in feld_x sowie die Summe aller sx-Einträge einer solchen Gruppe.

gut.

Anhand deiner Beispieldaten wäre das:
SELECT feld_1, sum(s1) AS anzahl FROM t GROUP BY feld_1;
feld_1 | anzahl

01       1
02       3
03       4

und
SELECT feld_2, sum(s2) AS anzahl FROM t GROUP BY feld_2;
feld_1 | anzahl

01       3
02       1
03       4

Die Ausgabe muß nicht zwingend so sortiert herauskommen.

und diese zwei sollen verknüpft werden.

... um _was_ auszugeben?

Naja, die summe von anzhal für feld_1:

01 = 1 + 3
02 = 3 + 1
03 = 4 + 4

Anhand deiner Beispieldaten: Welches Resultat willst du haben? Bitte mal als Tabelle darstellen.

Vermutlich wird sich das nicht als SQL-Abfrage realisieren lassen, sondern du mußt im abfragenden Programm einen Algorithmus schreiben, der das herausfindet.

Also, das Problem ist eine Abfrage für ein Fußballtabelle. ich hab alle Spiele in einer DB:

team1 | team2 | tore1 | tore2 | saison(Jahr) | ID (team1 + team2 + saison)

jedes team spielt einmal gegen die anderen Teams. jetzt versuch ich bei der Abfrage rauszufinden, wieviel Tore hat eine Manschaft geschossen und wieviele Siege (unentschieden und niederlagen) hat sie.

ich kann das natürlich alles im Programm einbauen, aber da ich auch grad erst angefangen hab mit mySQL zu arbeiten ist es interessant rauszufinden ob das direkter geht.

Struppi.