Moin!
Ja sicher. GROUP BY feld1, feld2, feld3
ja, das kenn ich das gruppiert nach fe1d1+feld2+feld3 die felder werden verkettet das ist abe rnciht was ich suche.
Was heißt hier "verkettet"? Es werden die Zeilen zusammengefaßt, die in den angegebenen Feldern übereinstimmen.
Ich meine nicht feld_1 und feld_2, sondern group by feld_1 oder feld_2.
Wie verstehst du das "oder" sowie das "und" in diesem Zusammenhang?
Naja, group by feld_1 OR feld_2
"Verstehen" war im Sinne von "Was für eine Wirkung meinst du damit" gemeint.
D.h. feld_1 und feld_2 können die gleichen werte haben und danach soll grippiert werden.
Mit anderen Worten: Nimm den Wert von feld1, schau, welche anderen Zeilen noch den gleichen Wert haben, und gruppiere. Und schau auch, welche anderen Zeilen von feld2 den gleichen Wert haben, und gruppiere die gleich mit dazu?
Funktioniert nicht. Kann gar nicht funktionieren.
und läßt sich eine Bedingung summieren?
in etwa so: count(s1 > s2)Was soll das zusammenrechnen?
wie oft das feld s1 größer als das feld s2 ist.
SELECT COUNT(*) FROM tabelle WHERE s1 > s2;
Schon weißt du das Ergebnis. Das kannst du aber natürlich nicht in anderen Querys noch mit unterschieben.
Insbesondere fehlt es an einem Datenbeispiel und der darauf aufsetzenden Erklärung des gewünschten Ergebnisses.
feld_1 | feld_2 | s1 | s2
01 02 1 1
02 03 3 4
03 01 2 3
03 02 2 0Die 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.
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?
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.
Daneben brauch ich noch die Anzahl wie oft s1 größer als s2 ist, allerdings auch group by.
Inwiefern "group by"?
- Sven Rautenberg
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|