dedlfix: mysql: SUM und DISTINCT

Beitrag lesen

Tach!

Heißt also, daß SUM vor DISTINCT ausgeführt wird??

Alles in der SELECT-Klausel (Felder und Formeln) muss zunächst vorliegen oder berechnet werden, bevor auf diese Ergebnismenge das DISTINCT angewendet werden kann.

Ich bräuchte die Summe der EKMenge, also SUM(t4.EKt3.Menge), die zu einer MID gehören. Eigentlich sogar nach MID gruppiert, was aber momentan egal ist.

Na, dann mach das doch so. Gruppiere nach MID und bilde dann die Summe. Ich nehme an, die MID ist in t1 einmalig und die Dopplungen, die du mit DISTINCT wegzubekommen versuchst, entstehen durch das Joinen von mehreren zugehörigen Datensätzen aus t2/3/4.

Der einfachste Fall aus den gegebenen Fakten wäre, das DISTINCT-Statement in ein Subquery zu verlagern und die Summe im äußeren zu bilden.

Gute Idee. Krieg ich, glaub ich, hin.

Nein, gut ist die nicht, nur einfach aus den bisherigen Fakten vorzuschlagen gewesen. Gut wird hingegen das Gruppieren sein. Ob es auch optimal ist, kann ich immer noch nicht abschließend beurteilen.

Ein anderer Vorschlag ist, die Summe in einer correlated Subquery zu bilden, besonders wenn das der einzige Wert ist, der aus den gejointen Tabellen genommen/gebildet werden soll. Damit umgeht man auch das GROUP-BY-Problem, dass man keine anderen Felder selektieren kann also die dort angegebenen, ohne eventuell Probleme zu bekommen. In dem Fall sind zwar keine zu erwarten, wenn alle Daten aus t1 kommen und nur durch das Joinen verdoppelt werden. Aber MySQL ist auch ziemlich das einzige SQL-System, dass ein Selektieren von nichtgruppierten Feldern zulässt. Es ist kein generell empfehlenswertes Vorgehen, auf dieses Feature zu setzen.

dedlfix.