Anzahl gleicher Datensätze abfragen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Anzahl gleicher Datensätze abfragen

Beitrag 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.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Definiere "funktioniert nicht richtig" - kommt eine Fehlermeldung oder was genau "funktioniert nicht"?
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Unknown column 'c.customers_id' in 'having clause'
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wenn du nicht verstanden hast, was ich dir sage, dann sag das bitte auch oder noch besser RTFM.
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Das ist die Fehlermeldung... :-?

Léo
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag 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
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „Coding & Technik“