Peter: Subquery im SELECT-Teil

Hallo Forum,

dies ist mein erstes Beitrag hier, ich studiere Informatik im ersten Semester und habe eine Frage. Kann man die Abfrage:

SELECT Name, ( SELECT AVG (Note) FROM studenten)
FROM studenten
WHERE Semester > 12;

auch wie folgt formulieren?

SELECT s.Name, AVG (s.Note) AS Notendurchschnitt
FROM studenten AS s
WHERE Semester > 12;

Danke im Voraus!
Peter

  1. Tach!

    Kann man die Abfrage:

    SELECT Name, ( SELECT AVG (Note) FROM studenten)
    FROM studenten
    WHERE Semester > 12;

    auch wie folgt formulieren?

    SELECT s.Name, AVG (s.Note) AS Notendurchschnitt
    FROM studenten AS s
    WHERE Semester > 12;

    Nein, geht nicht, jedenfalls nicht so. AVG() ist eine Aggregatfunktion. Diese fassen Werte mehrerer Datensätze zu einem Wert zusammen. Du würdest statt einem Wert je Student nur einen Wert aus allen Datensätzen bekommen. Dazu einen zufälligen Namen (MySQL) oder eine Fehlermeldung (andere DBMSe). Es fehlt ein Gruppieren über den Namen. Allerdings ist der Name vielleicht mehrfach vorhanden und damit für die Eindeutigkeit des Ergebnisses nicht zu gebrauchen. Im Subselect fehlt übrigens auch noch eine Korrelation, sonst wird pro Name der Durchschnitt aller Studenten angezeigt. Also »WHERE s2.Name = s1.Name« hinzufügen und ein Alias s1 in der Hauptquery und s2 in der Subquery für die Tabellennamen vergeben.

    dedlfix.

    1. Jetzt habe ich es verstanden.
      Vielen Dank!

      Peter