MyQL Abfrage mit eigenartigen Problemen
Klaus Kulta
- php
1 Hans0 Cheatah0 Ilja
-1 Severin Kacianka0 Cheatah0 Severin Kacianka1 Ilja
-3 steckl
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
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
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
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
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
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
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
Hallo,
Ich glaube nicht, dass der einzelne Datensatz über mehrere distinkte ID-Werte verfügt.
Vielleicht geht es um Indianer Dörfer :)
Gruß,
Severin
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
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.