Klaus Kulta: MyQL Abfrage mit eigenartigen Problemen

Hallo!

Ich habe eine MYSQL Abfrage bei der temporäre Spalten erzeugt werden.

SELECT....COUNT(DISTINCT(id)) numvotes,......

Wenn ich nun zB folgendes hinzufüge:

WHERE numvotes = '5'

erhalte ich immer diese Fehlermeldung:
Unknown column 'numvotes' in 'where clause

Eigenartig, denn dass es diese tempöräre Spalte gibt wird bewiesen dass ich danach sortieren kann mit

ORDER BY numvotes DESC

Da gibts keine Fehlermeldung.

Wo kann das Problem liegen?

lg
Klaus

  1. Hi Klaus,

    kurz und schmerzlos:

    bei einer aggregat-Funktion (sum, avg, max, min, count etc.) machst Du eine where-Bedingung, um die Menge, die in die Funktion kommt, einzuschränken und nach dem group by eine "having"-Bedingung, um die Ergebnis-Menge einzuschränken.

    Also:

    select dinge, count(dinge) from tabelle where dinge='Lebensmittel' group by dinge having count(dinge) = 2;

    Somit bekommst Du nur dann

    dinge              count
    ---------------------------
    Lebensmittel        2

    Wenn genau 2 mal 'Lebensmittel' in Deiner Tabelle vorkommt.

    Gruß

    Hans

    1. select dinge, count(dinge) from tabelle where dinge='Lebensmittel' group by dinge having count(dinge) = 2;

      »

      Tausend Dank Jungs. Habs mit having gelöst, kannte ich bislang nicht ;-).

      Grüsse
      Klaus

  2. Hi,

    Hans hat Dir ja schon geantwortet. Daher:

    SELECT....COUNT(DISTINCT(id)) numvotes,......

    Wie groß ist bei Dir die Wahrscheinlichkeit, dass ein IDentifier _nicht_ distinct ist? Wenn sich Deine Antwort von "0" unterscheidet, hast Du ein Problem.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. yo,

      Wie groß ist bei Dir die Wahrscheinlichkeit, dass ein IDentifier _nicht_ distinct ist? Wenn sich Deine Antwort von "0" unterscheidet, hast Du ein Problem.

      mal davon abgesehen, dass ein klammerpaar zuviel ist, wie kommst du den bitte zu diesem schluss ? eine id dient dazu innerhalb einer tabelle einen datensatz eindeutig zu identifizieren. deswegen muss sie aber doch nicht bei abfragen einzigartig (eindeutig) sein.

      Ilja

  3. Hallo,

    SELECT....COUNT(DISTINCT(id)) numvotes,......

    Wenn ich nun zB folgendes hinzufüge:

    WHERE numvotes = '5'

    erhalte ich immer diese Fehlermeldung:
    Unknown column 'numvotes' in 'where clause

    Wo kann das Problem liegen?

    Eine Eigenart von MySQL. Wenn ich mich recht erinnere müsste  WHERE  COUNT(DISTINCT(id)) = 5 dein Problem lösen.

    Gruß,
    Severin

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
    -- Benjamin Franklin
    1. Hi,

      Eine Eigenart von MySQL.

      nein, eine Eigenart von SQL. Des g'hört so.

      Wenn ich mich recht erinnere müsste  WHERE  COUNT(DISTINCT(id)) = 5 dein Problem lösen.

      Ich glaube nicht, dass der einzelne Datensatz über mehrere distinkte ID-Werte verfügt.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo,

        Ich glaube nicht, dass der einzelne Datensatz über mehrere distinkte ID-Werte verfügt.

        Vielleicht geht es um Indianer Dörfer :)

        Gruß,
        Severin

        --
        They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
        -- Benjamin Franklin
        1. yo,

          Ich glaube nicht, dass der einzelne Datensatz über mehrere distinkte ID-Werte verfügt.

          Vielleicht geht es um Indianer Dörfer :)

          um das rätsel lösung mal aufzulösen, es hat nichts mit der ID oder der eigenheit von mysql zu tun, sondern mit der ausführungsreihenfolge. wenn die ergebnismenge aus den datensätzen gebildet wird, dann kann kein dbms feststellen, ob nun die menge der jeweiligen gruppierung größer einer zahl ist oder nicht, letztlich können ja noch weitere datensätze dazu kommen, das dbms ist ja gerade dabei, datensatz für datensatz die ergebnismenge zu bestimmen.

          und dann wird auch klar, warum das mit HAVING geht, weil die selektionen dort sich im gegensatz zu where auf die ergebnismenge beziehen.

          Ilja

  4. hi

    SELECT....COUNT(DISTINCT(id)) numvotes,......

    Wenn ich nun zB folgendes hinzufüge:

    WHERE numvotes = '5'

    ich glaub du musst schreiben:

    SELECT....COUNT(DISTINCT(id)) AS numvotes,......

    so könnte es gehen.