0Pricing
SQL Academy · Leçon

Modèles de rapports du monde réel

Mettez en œuvre des tableaux de bord classiques : courbes de rétention, top-N par catégorie et découpage en sessions, le tout avec des fonctions de fenêtre.

Modèles de rapports du monde réel est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Modèle : top N par groupe

Les 3 meilleures commandes par utilisateur :

WITH ranked AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
  FROM orders
)
SELECT * FROM ranked WHERE rn <= 3;

Modèle : totaux cumulés

Revenus cumulés au fil du temps :

SELECT day, revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue;

Modèle : première occurrence

Première fois où chaque utilisateur a effectué chaque action :

SELECT user_id, action, MIN(ts) AS first_at
FROM events
GROUP BY user_id, action;

-- Or with window functions for full row:
WITH firsts AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id, action ORDER BY ts) AS rn
  FROM events
)
SELECT * FROM firsts WHERE rn = 1;

Modèle : fidélisation par cohorte

Utilisateurs regroupés par semaine d'inscription, fidélisation à la semaine N :

WITH cohorts AS (
  SELECT id AS user_id, date_trunc('week', created_at) AS cohort_week
  FROM users
),
activities AS (
  SELECT user_id, date_trunc('week', ts) AS active_week FROM events
)
SELECT c.cohort_week,
       (a.active_week - c.cohort_week) / 7 AS week_offset,
       COUNT(DISTINCT a.user_id) AS active
FROM cohorts c
JOIN activities a USING (user_id)
WHERE a.active_week >= c.cohort_week
GROUP BY c.cohort_week, week_offset
ORDER BY c.cohort_week, week_offset;

Modèle : analyse de l'entonnoir

Nombre d'utilisateurs qui atteignent chaque étape :

SELECT
  COUNT(*)                                  AS signed_up,
  COUNT(*) FILTER (WHERE first_login_at IS NOT NULL) AS logged_in,
  COUNT(*) FILTER (WHERE first_purchase_at IS NOT NULL) AS purchased
FROM users;

Modèle : création de sessions

Regrouper les événements en sessions lorsque l'intervalle dépasse 30 minutes :

WITH gaps AS (
  SELECT user_id, ts,
    CASE
      WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
           > INTERVAL '30 min'
      THEN 1 ELSE 0
    END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

Modèle : comparaison entre périodes

Comparer le mois actuel au mois précédent :

SELECT month, revenue,
       LAG(revenue) OVER (ORDER BY month) AS prev_month,
       revenue - LAG(revenue) OVER (ORDER BY month) AS delta,
       (revenue::FLOAT / NULLIF(LAG(revenue) OVER (ORDER BY month), 0) - 1) * 100 AS pct_change
FROM monthly_revenue
ORDER BY month;

Modèle : résultat sous forme de tableau croisé

Format large avec FILTER :

SELECT user_id,
       SUM(amount) FILTER (WHERE month = '2024-01') AS jan,
       SUM(amount) FILTER (WHERE month = '2024-02') AS feb,
       SUM(amount) FILTER (WHERE month = '2024-03') AS mar
FROM monthly_spend
GROUP BY user_id;

Modèle : utilisateurs actifs aujourd'hui

DAU / WAU / MAU :

SELECT
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '1 day')  AS dau,
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '7 days') AS wau,
  COUNT(DISTINCT user_id) FILTER (WHERE ts >= NOW() - INTERVAL '30 days') AS mau
FROM events;

Modèle : combler les lacunes

Les jours sans événement doivent afficher 0 et non être absents :

SELECT day, COALESCE(COUNT(e.id), 0) AS events
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, INTERVAL '1 day') AS day
LEFT JOIN events e ON date_trunc('day', e.ts) = day
GROUP BY day
ORDER BY day;

Combiner les fonctions de fenêtre pour obtenir des informations

Plusieurs colonnes fenêtrées dans une seule requête — lisible et rapide :

SELECT day, revenue,
       LAG(revenue) OVER w               AS prev,
       AVG(revenue) OVER (ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_7d,
       SUM(revenue) OVER (ORDER BY day)  AS running_total
FROM daily_revenue
WINDOW w AS (ORDER BY day)
ORDER BY day;

Récapitulatif

La plupart des rapports reposent sur quelques modèles : top N, totaux cumulés, cohortes, entonnoirs, création de sessions, comparaisons entre périodes, tableaux croisés et comblement des lacunes. Maîtrisez-les et vous pourrez construire n'importe quel tableau de bord SQL.

Vérification rapide

Vous construisez un rapport des « 5 meilleurs produits par catégorie ». Quel modèle SQL idiomatique utiliser ?

Questions Fréquemment Posées

La leçon « Modèles de rapports du monde réel » est-elle gratuite ?

Oui — le texte complet de « Modèles de rapports du monde réel » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Modèles de rapports du monde réel » ?

Mettez en œuvre des tableaux de bord classiques : courbes de rétention, top-N par catégorie et découpage en sessions, le tout avec des fonctions de fenêtre. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Modèles de rapports du monde réel » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Clauses de fenêtre : ROWS ou RANGE
  2. Lag et lead avec des fenêtres de lignes
  3. Regroupement avec NTILE et Cume_Dist
  4. Modèles de rapports du monde réel
← Retour à SQL Academy