Construire des calculs complexes

Réaliser des rapports en SQL

Tyler Pernes

Learning & Development Consultant

Approches

  1. Fonctions de fenêtrage
  2. Calculs en couches
Réaliser des rapports en SQL

Fonctions de fenêtrage

  • Fait référence à d'autres lignes de la table.
Réaliser des rapports en SQL

Fonctions de fenêtrage

  • Fait référence à d'autres lignes de la table.

Réaliser des rapports en SQL

Fonctions de fenêtrage

  • Fait référence à d'autres lignes de la table.

Réaliser des rapports en SQL

Syntaxe des fonctions de fenêtrage

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

Réaliser des rapports en SQL

Syntaxe des fonctions de fenêtrage

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

Réaliser des rapports en SQL

Syntaxe des fonctions de fenêtrage

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

  • PARTITION BY = périmètre du calcul
  • ORDER BY = ordre des lignes pendant le calcul
Réaliser des rapports en SQL

Exemples de fonctions de fenêtrage

Total des médailles de bronze

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           |
+-------------+-------------+---------------+
Réaliser des rapports en SQL

Exemples de fonctions de fenêtrage

Médailles de bronze par pays

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             |
+-------------+-------------+---------------+
Réaliser des rapports en SQL

Types de fonctions de fenêtrage

  • SUM()
  • AVG()
  • MIN()
  • MAX()
Réaliser des rapports en SQL

Types de fonctions de fenêtrage

  • LAG() et LEAD()

Réaliser des rapports en SQL

Types de fonctions de fenêtrage

  • LAG() et LEAD()

Réaliser des rapports en SQL

Types de fonctions de fenêtrage

  • ROW_NUMBER() et RANK()

Réaliser des rapports en SQL

Fonction de fenêtrage sur une agrégation

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            |
+----------+-------------+---------------+
Réaliser des rapports en SQL

Fonction de fenêtrage sur une agrégation

Requête finale

SELECT
    team_id,
    SUM(points) AS team_points,
    SUM(SUM(points)) OVER () AS league_points
FROM original_table
GROUP BY team_id;
Réaliser des rapports en SQL

Fonction de fenêtrage sur une agrégation

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.
Réaliser des rapports en SQL

Calculs en couches

  • Agréger une agrégation existante
  • S'appuie sur une sous-requête
Réaliser des rapports en SQL

Exemple de calculs en couches

Étape 1 : total de médailles de bronze par pays

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

Étape 2 : convertir en sous-requête et prendre le max

SELECT MAX(bronze_medals)
FROM
  (SELECT country_id, SUM(bronze) as bronze_medals
  FROM summer_games
  GROUP BY country_id) AS subquery;
Réaliser des rapports en SQL

Planifier des calculs complexes

Réaliser des rapports en SQL

Planifier des calculs complexes

  • Ordonnancement pour la fonction de fenêtrage ?
  • Deux agrégations avec un calcul en couches ?
Réaliser des rapports en SQL

Passons à la pratique !

Réaliser des rapports en SQL

Preparing Video For Download...