programowanieAnalityk raportów (SQL Analyst)

Czym różni się funkcja agregująca SUM() od funkcji okna SUM()? W jakich zadaniach preferuje się stosowanie funkcji okiennych? Podaj przykład.

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź

Funkcja agregująca SUM() sumuje wartości w całej grupie wierszy w zestawie wyników, zwracając jedną wartość dla każdej grupy (lub całego zapytania). Funkcja okna SUM() pozwala na obliczenie sumy w "oknie" wartości, zdefiniowanym w obrębie SELECT (poprzez OVER()), przy czym każdy wiersz jest zachowany w wyniku i ma dostęp do zgrupowanego wyniku w swoim "oknie". Jest to szczególnie wygodne do uzyskania pośrednich wyników według grup.

Przykład funkcji agregującej:

SELECT department_id, SUM(salary) FROM employees GROUP BY department_id;

Przykład funkcji okna:

SELECT department_id, salary, SUM(salary) OVER (PARTITION BY department_id ORDER BY hire_date) FROM employees;

Pytanie z pułapką

„Czy można uzyskać skumulowaną («bieżącą») sumę w kolumnie tylko za pomocą funkcji agregującej GROUP BY?”

Odpowiedź: Nie! GROUP BY daje tylko ostateczne agregaty, bieżąca suma wymaga albo funkcji okna, lub skomplikowanych podzapytań, które są trudniejsze i wolniejsze.

Przykład:

SELECT salary, SUM(salary) OVER (ORDER BY hire_date) AS running_total FROM employees;

Historia

W raporcie transakcyjnym bieżąca suma została zrealizowana za pomocą wielu powiązanych podzapytań. W miarę wzrostu tabeli wydajność spadła kilkadziesiąt razy. Przeprowadzono na funkcję okna — wszystko wróciło do sekund.


Historia

Próba zrobienia skomplikowanej analizy z wynikami wg grup przez GROUP BY przełożyła się na kilka etapów zrzutu i przetwarzania w zewnętrznym oprogramowaniu. Funkcje okna pozwoliły na stworzenie potrzebnego raportu w jednym zapytaniu SQL.


Historia

Analityk napisał zapytanie z funkcjami okna, używając niewłaściwego PARTITION BY — wyniki dla różnych grup się pomieszały. Efekt — zniekształcone raporty. Po poprawieniu podziału na grupy dane stały się poprawne.