Tanja G.: count und group by ?

Hi,

dies funktioniert:

SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv GROUP BY auftragsnummer;

Jetzt möchte ich alle 'anzahl' die >= 2 sind:

SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv WHERE anzahl>=2 GROUP BY auftragsnummer

Fehlermeldung:
Unknown column 'anzahl' in 'where clause'

Was muss ich ändern?

Grüßle

  1. Hi,

    SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv WHERE anzahl>=2 GROUP BY auftragsnummer

    SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv WHERE count(auftragsnummer)>=2 GROUP BY auftragsnummer

    muesste gehen.

    Gruss,
    Lude

    1. geht leider nicht:

      Invalid use of group function

    2. Hi Lude

      SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv WHERE count(auftragsnummer)>=2 GROUP BY auftragsnummer

      muesste gehen.

      Nein, das funktioniert ganz sicher nicht. Das Ergebnis des Counts ist noch gar nicht bekannt zu dem Zeitpunkt
      wo where ausgeführt wird, deswegen gibt es having. Des
      weiteren gehört anzahl nicht in Hochkommas. Des weiteren
      wird ja extra ein Alias vergeben, also sollte man es
      auch benutzen.

      Es müsste also heissen:
      SELECT count(auftragsnummer) AS anzahl,
             auftragsnummer
        FROM archiv
        GROUP BY auftragsnummer
        HAVING anzahl >= 2

      Siehe auch den Tipps und Tricks Artikel zu dem Thema.
      http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm

      Gruss Daniela

      --
      Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
      1. *perfekt*

        {{{ D A N K E }}}

      2. Hi,

        SELECT count(auftragsnummer) AS 'anzahl', auftragsnummer FROM archiv WHERE count(auftragsnummer)>=2 GROUP BY auftragsnummer

        muesste gehen.

        Nein, das funktioniert ganz sicher nicht. Das Ergebnis des Counts ist noch gar nicht bekannt zu dem Zeitpunkt
        wo where ausgeführt wird, deswegen gibt es having.

        mein Tipp war schon recht uebel.   :-(

        Des
        weiteren gehört anzahl nicht in Hochkommas.

        'anzahl' ist die Zeichenkette, die ausgegeben wird im Spaltenkopf. - Sollte man durchaus in Hochkommata setzen.

        Des weiteren
        wird ja extra ein Alias vergeben, also sollte man es
        auch benutzen.

        Ist das denn ein "Alias"? ("select * from table_a ta ..." waere einer)

        Es müsste also heissen:
        SELECT count(auftragsnummer) AS anzahl,
               auftragsnummer
          FROM archiv
          GROUP BY auftragsnummer
          HAVING anzahl >= 2

        Siehe auch den Tipps und Tricks Artikel zu dem Thema.
        http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm

        Gruss,
        Lude

        1. Hi Lude

          'anzahl' ist die Zeichenkette, die ausgegeben wird im Spaltenkopf. - Sollte man durchaus in Hochkommata setzen.

          Nein, solltest du nicht, das ist kein ordentliches SQL,
          es ist keine Zeichenkette sondern ein Bezeichner, bei
          gewissen Datenbanken wie Oracle müssen solche Bezeichner
          in doppelte Hochkommas ", aber niemals in einfache '.
          MySQL mag es akzeptieren, ordentliches SQL ist es nicht.

          Des weiteren
          wird ja extra ein Alias vergeben, also sollte man es
          auch benutzen.

          Ist das denn ein "Alias"? ("select * from table_a ta ..." waere einer)

          Das eine ist ein Tabellenalias, das andere ein Spaltenalias. Es ist übrigens weit mehr als nur eine
          Spaltenüberschrift.

          Gruss Daniela

          --
          Nein, wir frieren unsere Hühner nicht auf Gletschern fest.
          1. Hi, Daniela,

            unter MSSQL Server 2000 ist die Verwendung von Spalten-Alias in der HAVING-Klausel nicht erlaubt. - Das Zeug wuerde nicht laufen.

            Ansonsten sind Deine Ausfuehrungen moeglicherweise (leider) zutreffend. "Ordentliches" SQL ist tatsaechlich schwer zu lernen; zumindest fuer mich, der immer nur in die Hilfe starrt, statt es einfach fuer immer im Kopf zu behalten.

            Gruss,
            Lude