Wprowadzenie

PostgreSQL – statystyki podsumowujące i funkcje okna

Michel Semaan

Data Scientist

Motywacja

Łączna i narastająca liczba złotych medali USA na Letnich Igrzyskach Olimpijskich od 2004 r.

| Year | Medals | Medals_RT |
|------|--------|-----------|
| 2004 | 116    | 116       |
| 2008 | 125    | 241       |
| 2012 | 147    | 388       |

Status obrońcy tytułu w rzucie dyskiem

| Year | Champion | Last_Champion | Reigning_Champion |
|------|----------|---------------|-------------------|
| 1996 | GER      | null          | false             |
| 2000 | LTU      | GER           | false             |
| 2004 | LTU      | LTU           | true              |
| 2008 | EST      | LTU           | false             |
| 2012 | GER      | EST           | false             |
PostgreSQL – statystyki podsumowujące i funkcje okna

Plan kursu

  1. Wprowadzenie do funkcji okna
  2. Pobieranie, rangowanie i stronicowanie
  3. Agregujące funkcje okna i ramki
  4. Poza funkcjami okna
PostgreSQL – statystyki podsumowujące i funkcje okna

Zbiór danych Letnich Igrzysk Olimpijskich

  • Każdy wiersz reprezentuje medal przyznany na Letnich Igrzyskach Olimpijskich

Kolumny

  • Year, City
  • Sport, Discipline, Event
  • Athlete, Country, Gender
  • Medal
PostgreSQL – statystyki podsumowujące i funkcje okna

Funkcje okna

  • Wykonują operację na zbiorze wierszy powiązanych z bieżącym wierszem
  • Podobne do funkcji agregujących GROUP BY, ale wszystkie wiersze pozostają w wyniku

Zastosowania

  • Pobieranie wartości z poprzednich lub następnych wierszy (np. wartości poprzedniego wiersza)
    • Określanie statusu obrońcy tytułu
    • Obliczanie wzrostu w czasie
  • Przypisywanie rang porządkowych (1., 2. itd.) do wierszy na podstawie ich wartości na posortowanej liście
  • Sumy narastające, średnie kroczące
PostgreSQL – statystyki podsumowujące i funkcje okna

Numery wierszy

Zapytanie

SELECT
  Year, Event, Country
FROM Summer_Medals
WHERE
  Medal = 'Gold';

Wynik

| Year | Event                      | Country |
|------|----------------------------|---------|
| 1896 | 100M Freestyle             | HUN     |
| 1896 | 100M Freestyle For Sailors | GRE     |
| 1896 | 1200M Freestyle            | HUN     |
| ...  | ...                        | ...     |
PostgreSQL – statystyki podsumowujące i funkcje okna

Wprowadzenie ROW_NUMBER

Zapytanie

SELECT
  Year, Event, Country,
  ROW_NUMBER() OVER () AS Row_N
FROM Summer_Medals
WHERE
  Medal = 'Gold';

Wynik

| Year | Event                      | Country | Row_N |
|------|----------------------------|---------|-------|
| 1896 | 100M Freestyle             | HUN     | 1     |
| 1896 | 100M Freestyle For Sailors | GRE     | 2     |
| 1896 | 1200M Freestyle            | HUN     | 3     |
| ...  | ...                        | ...     | ...   |
PostgreSQL – statystyki podsumowujące i funkcje okna

Budowa funkcji okna

Zapytanie

SELECT
  Year, Event, Country,
  ROW_NUMBER() OVER () AS Row_N
FROM Summer_Medals
WHERE
  Medal = 'Gold';
  • FUNCTION_NAME() OVER (...)
    • ORDER BY
    • PARTITION BY
    • ROWS/RANGE PRECEDING/FOLLOWING/UNBOUNDED
PostgreSQL – statystyki podsumowujące i funkcje okna

Czas na ćwiczenia!

PostgreSQL – statystyki podsumowujące i funkcje okna

Preparing Video For Download...