Posiadam prostą bazę danych szkoły, w której znajdują się tabele: students, teachers, courses i tsc (w której znajdują się informacje o tym jaki student miał jaki przedmiot, jak długo i z którym wykładowcą oraz ocena z tego przedmiotu). Na tej bazie próbuję np. zrealizować zapytanie wyboru roku studiów, na którym jest najwyższa średnia. Robię to w taki sposób:
SELECT TOP 1 STUDYEAR, AVG(GRADE) AS ILE FROM COURSES, TSC WHERE COURSES.CNO = TSC.CNO GROUP BY STUDYEAR ORDER BY 2 DESC;
Co działa, ale nie w przypadku, gdy kilka lat ma tę samą średnią i trzeba wyświetlić wszystkie. Zapytanie poniższe nie działa (pracuje pod SQL Serverem):
SELECT T.STUDYEAR, T.SREDNIA FROM (SELECT STUDYEAR, AVG(GRADE) SREDNIA FROM COURSES, TSC WHERE COURSES.CNO = TSC.CNO GROUP BY STUDYEAR) T WHERE T.SREDNIA = (SELECT MAX(SREDNIA) FROM T)
Istnieje jakiś prosty sposób realizowania tego typy zapytań, gdzie muszę użyć kilka razy funkcji agregujących razem z grupowaniem, bez korzystania z tabel tymczasowych? Ogólnie mam kilka tego typu zapytań (np. wybór najwyższej średniej, największej liczby przedmiotów ze wszystkich lat, przedmiotu, na który uczęszczało najmniej osób itp.). Chciałbym wiedzieć, jak najoptymalniej realizować tego typu zapytania.