Aqua: MySQL - Ein Error mit GROUP BY ?!?

Hallo!

Das da geht:
SELECT *  FROM foo f LEFT OUTER join bar b on f.id = b.f_id;

Das geht nicht:
mysql> select f.name, COUNT(b.name) from foo f left outer join bar b on f.id = b.f_id;
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
mysql>

Warum will der eine GROUP BY  Clause haben?
Was macht das Ding?

Ich versteh das GROUP BY nicht in _diesem_  Fall (siehe error)

Danke!
Aqua

  1. Hi Aqua

    Das geht nicht:
    mysql> select f.name, COUNT(b.name) from foo f left outer join bar b on f.id = b.f_id;
    ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
    mysql>

    Dann lern es zu verstehen, in dein count gehört ein Stern und unten dann eine Group by Clause über den Namen. Dein Statement ist schlicht und einfach falsch.

    Aqua, lern endlich selber lernen, echt! Es ist wirklich idiotensicher und du kannst nicht periodisch mit den immer gleichen trivialen Fragen wiederkommen, manchmal sind sie inhaltlich sogar nahezu identisch mit welchen von vor einem halben Jahr oder Jahr.

    Gruss Daniela

  2. yo,

    mysql> select f.name, COUNT(b.name) from foo f left outer join bar b on f.id = b.f_id;
    ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

    Warum will der eine GROUP BY  Clause haben?

    count() und andere gehören zu den sogenannten aggregat-funktionen und heisst soviel wie gesamtheit-funktion. sie beziehen sich also auf alle datensätze einer Tabelle, bzw. einer Gruppe.

    GROUP BY gruppiert nun nach bestimmten spalten, die du nach der Klausel GROUP BY angibst. beispiel gruppieren nach namen, dann werden gruppen über den inhalt der spalte namen erzeugt. so stehen in der erste gruppe alle datensätze die den namen andreas haben, die zweite gruppe hat alle datensätze mit den namen Berta, usw.

    jetzt wird es interessant für deine fehlermeldung. da count pro gruppe oder tabelle nur einen wert zurück gibt, du aber durchaus mehrere namen in deiner tabelle hast, weiss das dbms nicht, welchen namen er von den vielen nehmen soll. deshalb die fehlermeldung.

    deshalb musst du jede spalte grupppieren, die zusammen mit einer aggregat-funktion angezeigt werden soll.

    Ilja