Co to są funkcje okna?
Funkcje okna umożliwiają użytkownikom wykonywanie obliczeń względem partycji (tj. podgrup lub sekcji) zestawu wyników, zazwyczaj tabeli lub wyników innego zapytania. W przeciwieństwie do tradycyjnych funkcji agregujących, które zwracają tylko jedną wartość dla każdej grupy zdefiniowanej w zapytaniu, funkcje okna zwracają pojedynczą wartość dla każdego wiersza wejściowego.
Jak przydatne są funkcje okien?
Funkcje okien zwiększają wydajność i zmniejszają złożoność zapytań analizujących partycje (okna) zbioru danych, stanowiąc alternatywę dla bardziej złożonych koncepcji SQL, m.in. zapytania pochodne. Typowe przypadki użycia to:
- Ranking wyników w określonym oknie (np. ranking na grupę)
- Uzyskiwanie dostępu do danych z innego wiersza w określonym oknie (np. raportowanie okresowe)
- Agregacja w określonym oknie (np. sumy bieżące):
Jak korzystać z funkcji okna
Funkcje okna są inicjowane za pomocą OVER
klauzuli i są konfigurowane przy użyciu trzech pojęć:
- partycja okna (
PARTITION BY
) - grupuje wiersze w partycje - zamawianie okien (
ORDER BY
) - określa kolejność lub kolejność wierszy w każdym oknie - ramka okna (
ROWS
) - definiuje okno za pomocą przesunięcia z określonego wiersza
Przegląd składni
function (expression) OVER
( [ PARTITION BY expression_list ]
[ ORDER BY order_list ]
[ ROWS frame_clause ])
Definicje
- expression_list:lista wyrażeń oddzielonych przecinkami, zazwyczaj nazwy kolumn
- order_list:lista wyrażeń oddzielonych przecinkami, zazwyczaj nazwy kolumn
- frame_clause:zdefiniuj przesunięcie za pomocą
CURRENT ROW
,_value_ PRECEDING
,UNBOUNDED PRECEDING
,_value_ FOLLOWING
,UNBOUNDED FOLLOWING
Przykłady
Ranking:ranking na grupę
SELECT
campaign
, month
, total_cost
, rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8
Poprzedni wiersz:analiza okres-w-okresie
SELECT
campaign
, month
, total_cost
, LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4
Agregacja w oknie:sumy bieżące
SELECT
campaign, month, monthly_cost
, sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month
Dokumentacja i lista funkcji:
Należy pamiętać, że subtelne różnice w użyciu i składni istnieją między bazą danych a bazą danych. Aby uzyskać informacje dotyczące Twojej implementacji, skorzystaj z poniższej dokumentacji dotyczącej źródła.
Postgres
- Samouczek
- Funkcje
Przesunięcie ku czerwieni
- Samouczek
- Funkcje
Wyrocznia
- Samouczek
Serwer SQL
- Samouczek
BigQuery
- Samouczek