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.