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

Code: Alles auswählen

HAVING c.customers_id = r.customers_id
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?! :o

@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