Grupowanie danych: Klauzula GROUP BY, GROUPING SETS, OVER cz. II
OVER
UWAGA: OVER() działa na bazach Microsoftu.
Funkcje grupujące oraz funkcje rankingu można uruchamiać dla zgrupowanych danych za pomocą GROUP BY, czasami jednak grupując otrzymane wynik, mamy sytuacje kiedy to w grupie znajduje się dokładnie jeden wiersz, a my potrzebuje obliczyć na przykład średnią z jakiś danych. Oczywiste jest to, że nie policzymy średniej z jednej danej, jest to całkowicie bezsensu. Możemy w takim przypadku użyć klauzuli OVER, która pozwala określić dodatkowy porządek grupowania. Co więcej zdefiniowane za pomocą tej funkcji grupy nazywamy partycjami dla których, można bez przeszkód wywołać funkcje grupujące takie jak AVG().
SELECT miasto, AVG(wiek) OVER() FROM klienci WHERE miasto = 'Kraków';
W powyższym zapytaniu obliczyliśmy średni wiek klientów, w danym mieście.
Gdybyśmy nie chcieli zastosować klauzuli OVER() musielibyśmy grupować dane po mieście, oraz wieku co dało by błędny wynik.
Jeżeli w OVER() zostanie umieszczone słowo kluczowe PARTITION BY to funkcja grupująca, bądź funkcja rankingu zostanie wywołana dla każdej zdefiniowanej w ten sposób partycji.
SELECT miasto, COUNT(*) OVER (PARTITION BY miasto) FROM klienci;