Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dwie funkcje agregujące
paaax
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 16.08.2008

Ostrzeżenie: (0%)
-----


Witam,

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:

  1. SELECT TOP 1 STUDYEAR, AVG(GRADE) AS ILE FROM COURSES, TSC
  2. WHERE COURSES.CNO = TSC.CNO
  3. 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):

  1. SELECT T.STUDYEAR, T.SREDNIA FROM (SELECT STUDYEAR, AVG(GRADE) SREDNIA FROM COURSES, TSC
  2. WHERE COURSES.CNO = TSC.CNO
  3. GROUP BY STUDYEAR) T
  4. 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.
Go to the top of the page
+Quote Post

Posty w temacie
- paaax   Dwie funkcje agregujące   26.01.2010, 20:13:58
- - Zyx   Niestety musisz powielić podrzędne zapytanie wylic...   27.01.2010, 08:12:46


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:32