KonzMod-Rechnerübung Präsenzaufgabe 7
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Where-Bedingung in Kombi mit Count bei JOIN funktioniert nicht wie erwartet
Hallo zusammen,
ich bin gerade dabei die Aufgabe 7 aus der SQL Rechnerübung zu lösen. Diese lautet wie folgt:
“Geben Sie alle Kunden aus, die genau 10 andere Kunden geworben haben.”
Es sind hierfür zwei Tabellen relevant. Nämlich die Tabelle Kunde(Kreditkartennummer, Vorname, Nachname, Strasse, Hausnummer, Stadt, PLZ) und die Tabelle Kunde_Kunde(Werber[Kunde], Geworbener[Kunde])
Die Aufgabe konnte ich schon fast vollständig lösen.
SELECT K.KREDITKARTENNUMMER, K.VORNAME, K.NACHNAME
FROM KUNDE AS K
JOIN KUNDE_KUNDE AS KK ON KK.WERBER = K.KREDITKARTENNUMMER
GROUP BY KREDITKARTENNUMMER
;
Jedoch ist mir noch nicht ganz klar, wie ich die Bedingung formulieren soll, sodass nur die Kunden ausgegeben werden, die GENAU 10 KUNDEN GEWORBEN HABEN. Mit WHERE COUNT(KK.GEWORBENER) = 10 nach dem GROUP BY bekomme ich den Fehler SYNTAX ERROR, UNEXPECTED TOKEN WHERE… .
Wisst ihr da zufällig weiter?
Das wäre wirklich klasse!
Vielen Dank schon einmal im Voraus!
Froschigon
Hallo nochmal,
gerade nach dem Abschicken der Frage konnte ich sie aufgrund eines Geistesblitzes doch noch selbst beantworten. Statt einem WHERE muss man bei Vorhandensein eines GROUP BY ein HAVING-Statement verwenden, um eine Bedingung zu formulieren.
Vielen Dank trotzdem!
Froschigon
“muss man” ist nicht ganz richtig. WHERE wird vor dem GROUP BY ausgewertet, HAVING danach. D.h. es gibt durchaus Abfragen, wo man beides braucht. Beispiel waere, wenn o.B.d.A. der Zeitpunkt der Werbung im Aktionszeitraum sein muss um zu zaehlen, dann haette man sowas ala …WHERE KK.DATE < ‘2015-12-01’::date…HAVING COUNT(KK.GEWORBENER) > 10
Fuer Abfragen, bei denen sich Teile erst aus dem GROUP BY ergeben koennen, also alle Vergleiche mit Aggregatsfunktionen ist das natuerlich nur mit HAVING moeglich.