Database
 sql >> Baza danych >  >> RDS >> Database

Samouczek dotyczący danych:Korzystanie z funkcji okna

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak klasyfikowane są polecenia SQL | UBIQ

  2. Jak porównać dwa wiersze z tej samej tabeli?

  3. Przechowywanie danych:REST vs. POSIX dla archiwów i HSM

  4. Porównywanie obiektów według wartości. Część 6:Wdrażanie równości struktury

  5. Jak używać klauzuli zbiorczego zbierania PL/SQL z instrukcją FETCH INTO?