Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

count geht ned :-(

0 views
Skip to first unread message

Gerd Wagner

unread,
Dec 16, 2009, 4:02:53 AM12/16/09
to
Hallo allerseits!

Habe den Verdacht, daß MySQL nicht richtig zählen kann. Ich komme so
drauf:

Habe 3 Tabellen:

1. Artikeltabelle (artikel), 4 Einträge
2. Interessententabelle (interesse), 50 Einträge
3. Kundentabelle (kunden), 20 Einträge

Nun möchte ich abfragen, zu welchem Artikel es wie viele Interessenten
und Kunden gibt.Das mache ich so:

select a.id,a.titel,count(i.id) as interessenten,count(k.id) as kunden
from artikel as a left join interesse as i on i.artikel=a.id left join
kunden as k on k.artikel=a.id group by a.id

Das Problem ist jetzt, daß MySQL mir im Ergebnis in den beiden Spalten
"interessenten" und "kunden" immer den größeren Wert der beiden
anzeigt: Also beide 50, obwohl es doch "nur" 20 Kunden gibt.

Kann MySQL nicht richtig zählen, oder mach ich da was falsch? Wer hat
einen Tipp für mich?

Liebe Grüße

Gerd Wagner

Dominik Echterbruch

unread,
Dec 16, 2009, 4:42:53 AM12/16/09
to
Gerd Wagner wrote:
>
> Habe 3 Tabellen:
>
> 1. Artikeltabelle (artikel), 4 Eintr�ge
> 2. Interessententabelle (interesse), 50 Eintr�ge
> 3. Kundentabelle (kunden), 20 Eintr�ge
>
> Nun m�chte ich abfragen, zu welchem Artikel es wie viele Interessenten

> und Kunden gibt.Das mache ich so:
>
> select a.id,a.titel,count(i.id) as interessenten,count(k.id) as kunden
> from artikel as a left join interesse as i on i.artikel=a.id left join
> kunden as k on k.artikel=a.id group by a.id
>
> Das Problem ist jetzt, da� MySQL mir im Ergebnis in den beiden Spalten
> "interessenten" und "kunden" immer den gr��eren Wert der beiden

> anzeigt: Also beide 50, obwohl es doch "nur" 20 Kunden gibt.

COUNT() gibt dir immer nur die Anzahl der Zeilen zur�ck, die per
Aggregation zusammengefasst wurden (also in dem Fall die Zeilen mit der
gleichen a.id). Da das an beiden Stellen immer die gleiche Anzahl ist,
kommt auch immer das Gleiche raus.

> Kann MySQL nicht richtig z�hlen, oder mach ich da was falsch? Wer hat
> einen Tipp f�r mich?

Da ich im Moment irgendwie nicht geradeaus denken kann, f�llt mir nur
ein, zwei Abfragen draus zu machen. Aber es gibt da bestimmt auch noch
eine elegantere L�sung.

Gr��e,
Dominik
--
"Wo k�men wir hin, wenn alle sagten, wo k�men wir hin, und niemand
ginge, um einmal zu schauen, wohin man k�me, wenn man ginge."
Kurt Marti
"Nichts ist praktischer, als eine gute Theorie." - Todor Karman

Christoph Herrmann

unread,
Dec 16, 2009, 4:56:16 AM12/16/09
to

Gerd Wagner schrieb:
> Habe den Verdacht, da� MySQL nicht richtig z�hlen kann. Ich komme so
> drauf:

Ich w�rde erstmal meine eigenen Fehler suchen statt MySQL gleich als
schuldigen hinzustellen. Die Wahrscheinlichkeit dass man selbst einen
Fehler gemacht hat ist h�her als dass eine viel genutzte Funktion wie
count fehlerhaft ist.

> select a.id,a.titel,count(i.id) as interessenten,count(k.id) as kunden
> from artikel as a left join interesse as i on i.artikel=a.id left join
> kunden as k on k.artikel=a.id group by a.id

Du solltest deine Abfragen erstmal leserlich formatieren, so zum Beispiel:

select
a.id,
a.titel,
count(i.id) as interessenten,


count(k.id) as kunden
from
artikel as a
left join interesse as i on i.artikel=a.id
left join kunden as k on k.artikel=a.id group by a.id

> Das Problem ist jetzt, da� MySQL mir im Ergebnis in den beiden Spalten
> "interessenten" und "kunden" immer den gr��eren Wert der beiden


> anzeigt: Also beide 50, obwohl es doch "nur" 20 Kunden gibt.
>

> Kann MySQL nicht richtig z�hlen, oder mach ich da was falsch? Wer hat
> einen Tipp f�r mich?

Das Problem hat dir ja Dominik schon aufgezeigt. Eine L�sung w�ren
subselects (nicht getestet):

select
a.id,
a.titel,
(select count(*) from interesse as i where i.artikel = a.id) as
interessenten,
(select count(*) from kunden as k where k.artikel = a.id) as kunden
from
artikel as a

--
Mit freundlichen Gr��en,
Christoph Herrmann

http://dragonprojects.de/

Gerd Wagner

unread,
Dec 16, 2009, 5:28:47 AM12/16/09
to
Hallo nochmal!

Ja, Dein Ansatz mit den subselects war richtig. Jetzt stimmt das
Ergebnis. Muß zugeben, daß ich noch nie was von der Möglichkeit von
subselects gehört hatte.

Vielen Dank nochmal und

liebe Grüße

Gerd Wagner

On 16 Dez., 10:56, Christoph Herrmann <use...@dragonprojects.de>
wrote:
> Gerd Wagner schrieb:
>
> > Habe den Verdacht, daß MySQL nicht richtig zählen kann. Ich komme so
> > drauf:
>
> Ich würde erstmal meine eigenen Fehler suchen statt MySQL gleich als


> schuldigen hinzustellen. Die Wahrscheinlichkeit dass man selbst einen

> Fehler gemacht hat ist höher als dass eine viel genutzte Funktion wie


> count fehlerhaft ist.
>
> > select a.id,a.titel,count(i.id) as interessenten,count(k.id) as kunden
> > from artikel as a left join interesse as i on i.artikel=a.id left join
> > kunden as k on k.artikel=a.id group by a.id
>
> Du solltest deine Abfragen erstmal leserlich formatieren, so zum Beispiel:
>
> select
>    a.id,
>    a.titel,
>    count(i.id) as interessenten,
>    count(k.id) as kunden
> from
>    artikel as a
>    left join interesse as i on i.artikel=a.id
>    left join kunden as k on k.artikel=a.id group by a.id
>

> > Das Problem ist jetzt, daß MySQL mir im Ergebnis in den beiden Spalten
> > "interessenten" und "kunden" immer den größeren Wert der beiden


> > anzeigt: Also beide 50, obwohl es doch "nur" 20 Kunden gibt.
>

> > Kann MySQL nicht richtig zählen, oder mach ich da was falsch? Wer hat
> > einen Tipp für mich?
>
> Das Problem hat dir ja Dominik schon aufgezeigt. Eine Lösung wären


> subselects (nicht getestet):
>
> select
>    a.id,
>    a.titel,
>    (select count(*) from interesse as i where i.artikel = a.id) as
> interessenten,
>    (select count(*) from kunden as k where k.artikel = a.id) as kunden
> from
>    artikel as a
>
> --

> Mit freundlichen Grüßen,
> Christoph Herrmann
>
> http://dragonprojects.de/

0 new messages