Hello,
Leider versteh ich das nicht.
dann lass mich dir ein Beispiel bauen:
Tabelle
a | b | c
x | y | 1
x | z | 2
m | n | 3
m | o | 4
Erläutere mir das Ergebnis von:
SELECT a, b, c FROM tabelle GROUP BY a
- wir wissen, es wird die Gruppen x und m geben. Aber woher wollen wir wissen, welche Werte für b und c ausgewählt werden. Die ersten? Die letzten? Die größten? ... Es gibt _eigentlich_ keine Logik (gem. SQL-Standard), allerdings erlaubt MySQL dir die Abfrage und liefer - ich müsste es nachgucken welchen - verlässlich eine der Kandidatenzeilen.
Wenn du aber sauber arbeiten willst, dann bleibt dir nur übrig der Datenbank die Bildungsvorschrift vorzugeben.
Folgende Abfrage ist legal:
SELECT a, SUM(c) FROM tabelle GROUP BY a
Warum legal? Nach a wird gruppiert, für c haben wir eine Bildungsvorschrift angegeben, die auf alle Elemente der Gruppe angewendet werden kann (soll heißen: die Zeilen als solche spielen keine Rolle). Das Ergebnis
x | 3
m | 7
Folgende ist ebenfalls legal
SELECT a, MIN(c) FROM tabelle GROUP BY a
Wiederum haben wir eine Bildungsvorschrift, wir sagen ihm, welches der Elemente pro Gruppe (für x 1 oder 2, für m 3 oder 4) wir verwenden wollen, nämlich das Kleinste:
x | 1
m | 3
Die Spalte y kriegen wir nicht ohne weiteres mit hinein. Um in Bezug auf die selektierten Spalten legales SQL zu schreiben bleiben z.B. folgende Möglichkeiten:
-
mit gruppieren
SELECT a, b, SUM(c) FROM tabelle GROUP BY a, b
-> liefert allerdings nicht das gewünschte Ergebnis. Wir gruppieren jetzt plötzlich Zeilen, die bei a UND b den selben Wert haben - Ergebnis:
x | y | 1
x | z | 2
m | n | 3
m | o | 4 -
Aggregationsfunktion
Analog obigem SUM/MIN/... für die Zeichendaten, bietet MySQL z.B. die Möglichkeit alle Strings aneinanderzufügen:
SELECT a, GROUP_CONCAT(b), SUM(c) FROM tabelle GROUP BY a
Ergebnis:
x | y,z | 3
m | n,o | 7
Daher nochmal mein Ausgangspunkt: du darfst nur Spalten selektieren, bei denen eindeutig geklärt ist, wie der Wert aussieht. Für deine Rechnungen, sofern der Datenstand konsistent ist, gebe ich folgende Abwandlung von oben zu bedenken:
Tabelle
a | b | c
x | y | 1
x | y | 2
m | n | 3
m | n | 4
SELECT a, b, SUM(c) FROM tabelle GROUP BY a, b
Da hier die Werte für alle Mitglieder der Gruppen x und m identisch ist, lautet das Ergebnis:
x | y | 3
m | n | 7
MfG
Rouven
-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
Vegetarier essen meinem Essen das Essen weg.