SQL-Abfrage (select)

...komplette Frage anzeigen

4 Antworten

Was ist steht denn in der Spakte PersonenNr? Die Anzahl der Kursteilnehmer, wie Schmizi annimmt oder vielleicht doch eher eine Personenidentifikationen.

Falls letzteres brauchst Du ein GROUP BY und ein COUNT(*)

PersonenNr ist die ID

Group By und Count habe ich auch schon versucht, aber ich krig das nicht so verbaut, dass ich darauf zugreifen kann.

Ich hatte schon diese Idee:

SELECT *
from angemeldet, (select count(teilnehmernr) as Anzahl from angemeldet group by kursnr) as neu

Dann kann ich aber nicht auf die Tabellenspalten zugreifen, die ich in der Tabelle erstellt habe...

Sorry, bin das momentan noch am lernen, und hab nicht so ganz den Durchblick :D

0
@Waldelb3

"angemeldet" ist Tabelle2?

Probier mal SELECT kursnr from angemeldet GROUP BY kursnr HAVING count(*) > x

1
@AchimP

Ok, danke! Es klappt! :)

Jetzt frag ich mich nurnoch, warum...? :D

0
@Waldelb3

Das ist doch offensichtlich ... :-)))))

Group by kennst Du? Guck Dir doch mal an, was überhaupt bei

SELECT kursnr, count(*) from angemeldet GROUP BY kursnr

rauskommt. Mit group by fasst Du rows mit gleicher group-by-Bedingung zusammen. Mit dem trickreichen count(*) kommst Du danach immer noch an die Anzahl der ursprünglichen rows pro zusammengefasster row. Supi, oder?

0
@AchimP

Wie kann ich jetzt, statt der KursID, die Kursbezeichnung anzeigen lassen?

0
@Waldelb3

Habs :D

select kurs.kursbezeichnung
from kurs, 

(SELECT angemeldet.kursnr
from angemeldet
GROUP BY angemeldet.kursnr 
HAVING count(angemeldet.teilnehmernr) > 1) as [neu]


where kurs.kursnr = [neu].kursnr
1

SELECT * FROM 'Tabelle 2' where PersonenNr > x

Dann habe ich alles aufgelistet, ausser das, wo die Person mit der ID 1, oder 2 angemeldet ist... Ich will aber die Anzahl...

Danke trotzdem! :)

0

Das musst Du mit GROUP BY und HAVING machen:

SELECT PersonenNr, COUNT(*) FROM Tabelle2

GROUP BY PersonenNr

HAVING COUNT(*) > x

Wenn Du diese auch noch aufgelistet haben willst:

SELECT PersonenNr, Tabelle1.KursNr, Kurse FROM Tabelle1, Tabelle2

WHERE Tabelle1.KursNr = Tabelle2.KursNr

AND PersonenNr IN

(SELECT PersonenNr, COUNT(*) FROM Tabelle2

GROUP BY PersonenNr

HAVING COUNT(*) > x)

Hierbei werden entsprechend dem ersten SELECT alle diejenigen aufgelistet, die im zweiten SELECT (das ist ein sog. Subselect und steht in Klammern) ausgewählt wurden.

Probiers mal damit, Gruppieren müsste eigentlich nicht nötig sein, aber da möchte ich mich nicht festlegen. Da ich grad kein DBMS parat habe um es zu testen.

SELECT Kurse, KursNr FROM Tabell1 JOIN Tabell2 ON Tabell1.KursNr = Tabell2.KursNr WHERE PersonenNr > x

Ich muss vorher noch die angemeldeten Personen zählen... PersonenNr ist nur die ID

0
@Waldelb3

ja da kannst du ein Count in die Select-Anweisung schmeissen, wenn doe PersonenNr auch wieder eine ID ist müsste man sowas einbauen:

SELECT (SELECT COUNT(Tabell2.PersonenNr) From Tabell2) 'Angemeldete_Personen', Kurse, KursNr FROM ....

Und dann in der WHERE Klausel sich auf Angemeldete_Personen beziehen.

0
@DrPimp

Ich seh' grad das es noch ne Tabelle gibt und du hast es ja gelöst :)

Ausserdem hab ich noch ein DISTINCT vergessen ;)

0
@DrPimp

Das funzt so nicht. Probier's mal aus, wenn Du wieder ein DBMS hast.

0

Gruppieren ist nötig, weil die Spalte "PersonenNr" nicht die Anzahl der Kursteilnehmer, sondern je row die Id eines Kursteilnehmers enthält.

1

Was möchtest Du wissen?