Seite 1 von 2
Anzahl gleicher Datensätze abfragen
Verfasst: 29.04.2007 13:58
von leopittoni
Hallo
Ich versuche, alle "customers_id"'s abzufragen, welche in der DB min. 15 Mal vorkommen.
Code: Alles auswählen
$daten = "SELECT customers_id, COUNT(customers_id) As zahl
FROM rangpunkte WHERE zahl>=15 GROUP BY customers_id ORDER BY customers_id ASC";
So funktionierts wohl nicht... Kann mir jemand weiterhlefen?
Danke! Léo.
Verfasst: 29.04.2007 15:49
von Pyramide
Werte aus Aggregatfunktionen (also z.B. COUNT) müssen mit HAVING gefiltert werden. Also "WHERE zahl>=15 GROUP BY customers_id" durch "GROUP BY customers_id HAVING zahl>=15" ersetzen.
Verfasst: 29.04.2007 16:05
von leopittoni
ok... vielen Dank... Verschalchtelt funktionierts aber nicht richtig...
(Ausserdem will ich es jetzt einfach nach häufigkeit sortieren)
Code: Alles auswählen
$miniid = "SELECT c.customers_firstname, c.customers_lastname, COUNT(r.customers_id) As zahl
FROM rangpunkte r, customers c
GROUP BY r.customers_id HAVING c.customers_id = r.customers_id
ORDER BY zahl ASC";
Danke für die Hilfe! Léo
Verfasst: 29.04.2007 17:57
von Pyramide
Definiere "funktioniert nicht richtig" - kommt eine Fehlermeldung oder was genau "funktioniert nicht"?
Verfasst: 29.04.2007 18:28
von leopittoni
Unknown column 'c.customers_id' in 'having clause'
Verfasst: 29.04.2007 18:47
von Pyramide
Wenn du nicht verstanden hast, was ich dir sage, dann sag das bitte auch oder noch besser RTFM.
Verfasst: 29.04.2007 18:50
von leopittoni
Das ist die Fehlermeldung...
Léo
Verfasst: 29.04.2007 18:54
von Pyramide
Dann erklär mir doch mal bitte, wo genau bei
die Aggregatfunktion ist.
Verfasst: 29.04.2007 19:00
von leopittoni
stimmt...
Wenn ich da aber ein WHERE hintue, gibts:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Code: Alles auswählen
$miniid = "SELECT c.customers_firstname, c.customers_lastname, COUNT(r.customers_id) As zahl
FROM rangpunkte r, customers c
WHERE c.customers_id = r.customers_id
ORDER BY zahl ASC";
Wie soll denn das sonst gehen... Komme mit diesen verschlachtelten Abfragen (aus zei versch. tabellen) nicht klar, muss es aber anwenden, da ich sonst zwei verschtelte where-schlaufen habe, was cuh wieder zu Problemen führt...
Léo
Verfasst: 29.04.2007 19:42
von Miriam
Pyramide hat geschrieben:...oder noch besser RTFM.
Und jetzt musst Du den Knigge akzeptieren?!
@Leo: das GROUP BY muss aber wegen der Aggregatfunktion auch noch drin bleiben.
Code: Alles auswählen
SELECT c.customers_firstname, c.customers_lastname, COUNT(r.customers_id) AS zahl
FROM rangpunkte r, customers c
WHERE c.customers_id = r.customers_id
GROUP BY c.customers_lastname HAVING zahl > 14
ORDER BY zahl;
probier' mal