sum(distinct expr) oder wie mache ich das?

jeipack

Erfahrenes Mitglied
Hi
Ich habe eine recht komplexe Abfrage die mir in etwa sowas liefert (stark vereinfacht)

Code:
tbl1.id	tbl2.id	tbl2.z1	tbl2.z2
a1	b1	8	2
a1	b2	10	5
a1	b3	15	3
a1	b4	8	2
a1	b1	8	2
a1	b2	10	5
a1	b3	15	3
a1	b4	8	2
Wie man sieht kommen die Werte aus tbl2 doppelt vor. Dies weil ich später noch in tbl3 etc joine und es da zwischen tbl1 und tbl3 mehrere Übereinstimmungen geben kann.
Auf jedenfall groupiere ich schlussendlich nach tbl1.id.

Nun möchte ich gerne zu jeder id aus tbl1 die Summe von sum(tbl2.z1/tbl2.z2). Da die Datensätze doppelt sind dachte ich mir ich mach einfach sum(distinct tbl2.z1/tbl2.z1). Dies klappt leider nur solange wie es keine gleichen Werte in z1 und z2 gibt - da diese durch das distinct auch ausgefiltert werden (siehe Datensatz tbl2.id=b1 und tbl2.id=b4).
Meine Befürchtung ist langsam, dass das was ich möchte gar nicht möglich ist.

Hoffe jemand kann mich vom Gegenteil überzeigen :D

Grüsse
jeipack

PS: Wenn was nicht klar ist einfach fragen
 
Hi
Ne funktioniert nicht weil ich ja nach tbl1.id gruppiere. Somit also beim obigen Beispiel schlussendlich nur einen Datensatz bekomme (da es ja nur eine tbl1.id gibt). Wenn ich noch nach tbl2.id gruppiere bekomme ich 4 Datensätze (da es 4 tbl2.id's gibt). Aber die Überlegung ging schon in die richtige Richtung. Nur glaube ich dass es mit MySQL nicht möglich ist.

Man bräuchte einen distinct Befehl der nach einem anderem Feld, als das was schlussendlich angezeigt wird, filtern kann. Ala distinct(tbl2.id, tbl2.z1) der dann Dublikate anhand des ersten Parameters ausfiltert, aber den zweiten Parameter ausgibt :D

Ich habe das Problem mal als erledigt markiert, da ich inzwischen einen Workaround erstellt habe.

Grüsse
 
Zurück