Hallo Community - bin neu hier und auch noch ein SQL Newbie :-)
Ich habe folgendes Problem. Ich will über eine Anfrage eine weitere Anfrage anwenden und dann daraus den "Professor" mit den meisten Prüfungen ausgeben.
Die folgende Anfrage:
gibt folgendes aus:Code:select p.Name, count(pr.vorlnr) as Anzahl from professoren p, pruefen pr where p.persnr=pr.persnr group by p.name order by Anzahl desc
Name Anzahl
Kant 3
Sokrates 2
Russell 2
jetzt habe ich mir überlegt, dass ich über die erste select Anfrage eine weitere "stülpe" in der Art, dass
Leider funktioniert das nicht, vielleicht kann mir jmd helfen! Verstehe das mit der MAX Funktion noch nicht so richtig bzw. weiß gerade nicht wo ich die Unteranfrage platzieren muss.select tmp.Name, tmp.Anzahl
from (select p.Name, count(pr.vorlnr) as Anzahl
from professoren p, pruefen pr
where p.persnr=pr.persnr
group by p.name
order by Anzahl desc)tmp
where tmp.anzahl=MAX(tmp.anzahl)
group by tmp.name
Ich sag schon mal vielen Dank
Daniel
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hi akretschmer
danke für die schnelle kompetente hilfe.
Nun habe ich das so geschrieben.
und das klappt auch wunderbar.select p.Name, count(pr.vorlnr) as Anzahl
from professoren p, pruefen pr
where p.persnr=pr.persnr
group by p.name
order by count(pr.vorlnr) desc limit 1
Hätte man das auch über die MAX Aggreagatfunktion irgendwo lösen können?
Nochmals vielen Dank!
Daniel
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Habs noch nciht ganz verstanden :-)
Bei folgender Anfrage kommt
die maximale Anzahl von Prüfungen raus.select max(tmp.Anzahl) ,
from (select p.name, count(pr.vorlnr) as Anzahl
from professoren p, pruefen pr
where p.persnr=pr.persnr
group by p.name) tmp
Jedoch wenn ich nun versuche den name noch dazu zu bekommen, verändert sich das Anfrage Ergebnis zum "Negativen" (aus meiner Sicht)
kommt wieder zu jeder Anzahl der Prüfungen der Püfer (Name) und nicht nur der Prüfer zu den Pürufungen mit dem Maximalen Wert!select max(tmp.Anzahl) , tmp.name
from (select p.name, count(pr.vorlnr) as Anzahl
from professoren p, pruefen pr
where p.persnr=pr.persnr
group by p.name)tmp
group by tmp.name
Jetzt könnte ich ja wieder sagen order by Anzahl desc limit 1 und dann ist es wieder so wie ich es gewollte habe, aber dann könnte ich mir ja uach die geschachtelte Anfrage sparen. Ich blick gerade nicht mehr durch. Vielleicht kannst du noch ein Tipp raushauen :-)
Grüße
Daniel
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Also, sowas wie diese Lösung:
geht dann zwar ohne das LIMIT, aber schön ist wohl was anderes.Code:test=*# select * from max; name -------- foo bar bar foobar foo foo (6 rows) test=*# select name, count(1) as anzahl from max group by name order by 2 desc limit 1; name | anzahl ------+-------- foo | 3 (1 row) test=*# select name, anzahl from (select name, count(1) as anzahl from max group by name) foo where anzahl = (select max(anzahl) from (select name, count(1) as anzahl from max group by name) bar); name | anzahl ------+-------- foo | 3 (1 row)
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen