Ergebnis 1 bis 7 von 7

Thema: MAX Funktion

  1. #1
    Buck ist offline Neuer Benutzer
    Registriert seit
    01.04.2008
    Beiträge
    3

    Standard MAX Funktion

    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:

    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
    gibt folgendes aus:

    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
    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
    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.

    Ich sag schon mal vielen Dank
    Daniel
    Angehängte Grafiken Angehängte Grafiken

  2. #2
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Buck Beitrag anzeigen
    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:

    [CODE]select p.Name, count(pr.vorlnr) as Anzahl
    ... order by count(pr.vorlnr) desc limit 1;

    An *vermutlich würde auch by anzahl gehen* dreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    Buck ist offline Neuer Benutzer
    Registriert seit
    01.04.2008
    Beiträge
    3

    Standard

    Hi akretschmer

    danke für die schnelle kompetente hilfe.

    Nun habe ich das so geschrieben.

    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
    und das klappt auch wunderbar.

    Hätte man das auch über die MAX Aggreagatfunktion irgendwo lösen können?

    Nochmals vielen Dank!
    Daniel

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Buck Beitrag anzeigen
    Hi akretschmer

    danke für die schnelle kompetente hilfe.

    Nun habe ich das so geschrieben.



    und das klappt auch wunderbar.

    Hätte man das auch über die MAX Aggreagatfunktion irgendwo lösen können?

    Nochmals vielen Dank!
    Daniel
    Irgendwie - ja. Zum Bleistift in der Form 'select max(anzahl) from ( select count(..) as anzahl) foo' oder so...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    Buck ist offline Neuer Benutzer
    Registriert seit
    01.04.2008
    Beiträge
    3

    Standard

    Habs noch nciht ganz verstanden :-)
    Bei folgender Anfrage kommt
    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
    die maximale Anzahl von Prüfungen raus.

    Jedoch wenn ich nun versuche den name noch dazu zu bekommen, verändert sich das Anfrage Ergebnis zum "Negativen" (aus meiner Sicht)

    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
    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!

    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

  6. #6
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Buck Beitrag anzeigen
    Habs noch nciht ganz verstanden :-)
    Macht nix - war Bullshit, sorry.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Macht nix - war Bullshit, sorry.

    Andreas
    Also, sowas wie diese Lösung:

    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)
    geht dann zwar ohne das LIMIT, aber schön ist wohl was anderes.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum