Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 3 · Pipelines

CTE et pipelines analytiques

Lorsque le calcul devient complexe, on le décompose en étapes lisibles avec WITH, qui définit des CTE (Common Table Expressions) : une étape pour les rendements, une pour les moyennes, une pour les signaux, une pour la performance. SQL devient alors un pipeline de transformation.

WITH returns AS (
    SELECT *, close - LAG(close) OVER (PARTITION BY ticker ORDER BY date) AS ret
    FROM prices
),
ma AS (
    SELECT *, AVG(close) OVER (PARTITION BY ticker ORDER BY date
                               ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS ma5
    FROM returns
),
signal AS (
    SELECT *, CASE WHEN close > ma5 THEN 1 ELSE 0 END AS signal
    FROM ma
)
SELECT *, signal * ret AS strategy_ret
FROM signal

Lecture détaillée

  1. returns : on introduit la dépendance au passé ;
  2. ma : on introduit une structure locale glissante ;
  3. signal : on transforme une mesure en action ;
  4. sélection finale : on produit la contribution de stratégie.

Chaque CTE joue le rôle d'un opérateur intermédiaire. On peut représenter le pipeline comme une composition T = T4 ∘ T3 ∘ T2 ∘ T1 où T1 calcule les rendements, T2 les moyennes, T3 construit un signal et T4 calcule la performance. La requête n'est pas une suite de boucles écrites explicitement : c'est une description déclarative d'une chaîne de calcul.

prix→retours→tendance→signal→cumul

Vérifie que tu as compris

Dans le pipeline, quelle CTE introduit la dépendance au passé ?

Ajouter la performance cumulée

On ajoute une CTE strategy (signal * ret AS strategy_ret) puis on termine par :

SELECT *, SUM(strategy_ret) OVER (PARTITION BY ticker ORDER BY date
                                  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum
FROM strategy

Le pipeline se lit alors : prix → retours → tendance locale → signal → résultat instantané → résultat cumulé. L'intérêt pédagogique du SQL analytique est qu'il rend visible la structure logique du calcul.

À toi de coder

Le pipeline complet avec CTE

Reproduis la chaîne du cours : prix → rendements → moyenne locale → signal → rendement de stratégie → performance cumulée. Les trois premières CTE sont fournies (returns, ma, signal). Complète la CTE strategy (strategy_ret = signal * ret) puis la requête finale qui renvoie, pour chaque actif, la performance cumulée à la dernière date (2024-01-06), colonnes ticker, cum, triées par ticker.

Ctrl/⌘+Entrée

Vérifie que tu as compris

Pourquoi découper en CTE plutôt qu'écrire une seule requête monolithique ?