Calcule complexe

Raportare în SQL

Tyler Pernes

Learning & Development Consultant

Abordări

  1. Funcții de fereastră
  2. Calcule stratificate
Raportare în SQL

Funcții de fereastră

  • Referențiază alte rânduri din tabel.
Raportare în SQL

Funcții de fereastră

  • Referențiază alte rânduri din tabel.

Raportare în SQL

Funcții de fereastră

  • Referențiază alte rânduri din tabel.

Raportare în SQL

Sintaxa funcțiilor de fereastră

SUM(value) OVER (PARTITION BY field ORDER BY field)

Raportare în SQL

Sintaxa funcțiilor de fereastră

SUM(value) OVER (PARTITION BY field ORDER BY field)

Raportare în SQL

Sintaxa funcțiilor de fereastră

SUM(value) OVER (PARTITION BY field ORDER BY field)

  • PARTITION BY = domeniul calculului
  • ORDER BY = ordinea rândurilor în calcul
Raportare în SQL

Exemple de funcții de fereastră

Total medalii de bronz

SELECT 
    country_id, 
    athlete_id, 
    SUM(bronze) OVER () AS total_bronze
FROM summer_games;
+-------------+-------------+---------------+
| country_id  | athlete_id  | total_bronze  |
|-------------|-------------|---------------|
| 11          | 77505       | 141           |
| 11          | 11673       | 141           |
| 14          | 85554       | 141           |
| 14          | 76433       | 141           |
+-------------+-------------+---------------+
Raportare în SQL

Exemple de funcții de fereastră

Medalii de bronz pe țară

SELECT 
    country_id, 
    athlete_id, 
    SUM(bronze) OVER (PARTITION BY country_id) AS total_bronze
FROM summer_games
+-------------+-------------+---------------+
| country_id  | athlete_id  | total_bronze  |
|-------------|-------------|---------------|
| 11          | 77505       | 12            |
| 11          | 11673       | 12            |
| 14          | 85554       | 5             |
| 14          | 76433       | 5             |
+-------------+-------------+---------------+
Raportare în SQL

Tipuri de funcții de fereastră

  • SUM()
  • AVG()
  • MIN()
  • MAX()
Raportare în SQL

Tipuri de funcții de fereastră

  • LAG() și LEAD()

Raportare în SQL

Tipuri de funcții de fereastră

  • LAG() și LEAD()

Raportare în SQL

Tipuri de funcții de fereastră

  • ROW_NUMBER() și RANK()

Raportare în SQL

Funcție de fereastră pe o agregare

original_table
+----------+-----------+---------+ 
| team_id  | player_id | points  |
|----------|-----------|---------|    
| 1        | 4123      | 3       |
| 1        | 5231      | 6       |
| 2        | 8271      | 5       |
+----------+-----------+---------+
desired_report
+----------+-------------+---------------+ 
| team_id  | team_points | league_points |
|----------|-------------|---------------|    
| 1        | 9           | 43            |
| 2        | 12          | 43            |
| 3        | 22          | 43            |
+----------+-------------+---------------+
Raportare în SQL

Funcție de fereastră pe o agregare

Interogare finală

SELECT
    team_id,
    SUM(points) AS team_points,
    SUM(SUM(points)) OVER () AS league_points
FROM original_table
GROUP BY team_id;
Raportare în SQL

Funcție de fereastră pe o agregare

SELECT
    team_id,
    SUM(points) AS team_points,
    SUM(points) OVER () AS league_points
FROM original_table
GROUP BY team_id;
ERROR: points must be an aggregation or appear in a GROUP BY statement.
Raportare în SQL

Calcule stratificate

  • Agregarea unei agregări existente
  • Utilizează o subinterogare
Raportare în SQL

Exemplu de calcul stratificat

Pasul 1: Total medalii de bronz pe țară

SELECT country_id, SUM(bronze) as bronze_medals
FROM summer_games
GROUP BY country_id;

Pasul 2: Transformare în subinterogare și extragerea maximului

SELECT MAX(bronze_medals)
FROM
  (SELECT country_id, SUM(bronze) as bronze_medals
  FROM summer_games
  GROUP BY country_id) AS subquery;
Raportare în SQL

Planificarea calculelor complexe

Raportare în SQL

Planificarea calculelor complexe

  • Ordonare pentru funcția de fereastră?
  • Două agregări cu calcul stratificat?
Raportare în SQL

Să exersăm!

Raportare în SQL

Preparing Video For Download...