Sous-requêtes dans l'instruction FROM

Manipulation de données en SQL

Mona Khalil

Data Scientist, Greenhouse Software

Sous-requêtes dans FROM

  • Restructurer et transformer les données
    • Transformer les données de long en large avant sélection
    • Préfiltrage des données
  • Calcul des agrégats d'agrégats
    • Quelles sont les trois équipes qui ont marqué le plus grand nombre moyen de buts à domicile ?
      1. Calculer la moyenne (AVG) pour chaque équipe
      2. Obtenir les 3 valeurs AVG les plus élevées
Manipulation de données en SQL

Sous-requêtes FROM…

SELECT
  t.team_long_name AS team,
  AVG(m.home_goal) AS home_avg
FROM match AS m
LEFT JOIN team AS t
ON m.hometeam_id = t.team_api_id
WHERE season = '2011/2012'
GROUP BY team;
| team                 | home_avg         |
|----------------------|------------------|
| 1. FC Köln           | 1.13725490196078 |
| 1. FC Nürnberg       | 1.27058823529412 |
| 1. FSV Mainz 05      | 1.43697478991597 |
| AC Ajaccio           | 1.12280701754386 |
Manipulation de données en SQL

… aux requêtes principales !


FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team)
Manipulation de données en SQL

… aux requêtes principales !


FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
Manipulation de données en SQL

… aux requêtes principales !

SELECT team, home_avg
FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
Manipulation de données en SQL

… aux requêtes principales !

SELECT team, home_avg
FROM (SELECT
          t.team_long_name AS team,
          AVG(m.home_goal) AS home_avg
      FROM match AS m
      LEFT JOIN team AS t
      ON m.hometeam_id = t.team_api_id
      WHERE season = '2011/2012'
      GROUP BY team) AS subquery
ORDER BY home_avg DESC
LIMIT 3;
| team           | home_avg |
|----------------|----------|
| FC Barcelona   | 3.8421   |
| Real Madrid CF | 3.6842   |
| PSV            | 3.3529   |
Manipulation de données en SQL

Éléments à retenir

  • Vous pouvez créer plusieurs sous-requêtes dans une seule instruction FROM

    • Créer des alias !
    • Faire des jointures !
  • Vous pouvez joindre une sous-requête à une table dans FROM

    • Inclure une colonne de jonction dans les deux tables !
Manipulation de données en SQL

Passons à la pratique !

Manipulation de données en SQL

Preparing Video For Download...