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;