Ilja: Kniffliges Problem - LEFT JOIN

Beitrag lesen

yo,

du unterliegst einem vielgenutzen mysql "bug", mysql würde wohl von einem feature reden. gemeint ist die verwendung von group by unter mysql. alle anderen dbms würden dir mit deiner abfrage eine fehlermeldung ausgeben, was auch sehr sinnvoll ist. nur mysql beschreitet dort andere wege und läßt damit regelmäig ihre nutzer in eine falle tappen.

der grundsatz, den du mit deiner abfrage verletzt hast, ist, alle spalten, die angezeigt werden sollen und keine aggregat-funktionen sind, müssen auch in die group by klausel. und genau das ist bei dir nicht der fall. ok, das war das eine problem.

Das Problem ist halt, dass COUNT( r.anzahl ) die Anzahl aller Rechnungen ausgibt und nicht eines bestimmten Partners. GEnau so ist es bei den SUM().

nein, was du machst ist, du gruppierst nach der id der partner-tabelle. damit beziehen sich auch alle agggregat-funktionen genau auf diese gruppierung. hat also ein partner 3 rechnungen und 2 views, dann wird count(*) 2 * 3 ausgeben sprich 6 in diesem falle. du zählst also mit dem count nicht die anzahl aller rechnungen, sondern die anzahl aller datensätze über die beiden INNER JOINs (somit sind keine null werte möglich).

ich sehe auf die schnelle zwei ansätze, wobei ich dich dabei bitte, erst einmal richtig zu gruppieren. erstens kannst du korrelierte unterabfragen einsetzen. ich selbst mag diese sehr und benutze sie sehr oft, wobei sie im allgmeinen doch ein wenig schief angesehen werden. oder aber du setzt in den aggregat-funktionen count()  ein DISTINCT vor den r.spaltennamen, wobei dieser wert eindeutig sein muss, zum beispiel COUNT(DISTINCT r.id). was die summe betrifft, da wird es dann doch wohl eine korrelierte unterabfrage, weil die werte sicherlich auch gleich sein können.

Ilja