prof404
← Retour aux ressources du module
Sommaire (5 sections) · 5 min
Ce que tu travailles iciCollecter et traiter les données · Analyser et synthétiserPourquoi ces compétences ?
  • BC01Collecter et traiter les données. Aller chercher la donnée et la rendre fiable : écrire les scripts qui l'extraient, repérer ce qui manque ou se contredit, et décider quoi en faire.
  • BC02Analyser et synthétiser. Faire parler la donnée : calculer ce qui décrit vraiment une population, repérer une tendance, et dire ce qu'elle veut dire pour l'entreprise.

Ce sont les compétences du titre RNCP 38616, celles sur lesquelles le jury évalue.

Déclarer le périmètre d'un calcul

Deux requêtes justes donnent deux résultats différents parce qu'elles ne comptent pas les mêmes lignes. Avant de comparer les nombres, écris la population de chaque calcul : les objets retenus et les règles qui les incluent.

Tu prépares un inventaire des fiches produit d'Olist. « Combien de produits ont des photos ? » peut désigner les produits dont le nombre de photos est renseigné, ceux qui en déclarent au moins une, ou ceux qui en déclarent au moins trois. Ces périmètres peuvent donner des comptes différents. Le champ product_photos_qty indique un nombre déclaré dans l'export ; il ne permet pas de vérifier que les images sont encore accessibles ni qu'elles sont de qualité.

Écrire ce que tu comptes

Dans products, une ligne représente un produit, identifié par product_id. Avant le SQL, complète ces quatre lignes pour le périmètre « au moins une photo » :

Population : produits qui…
Objet compté : …
Mesure : …
Période ou état des données : …
Comparer la définition à la requête attendue

Population : produits dont le nombre de photos déclaré est supérieur ou égal à 1. Objet compté : un produit distinct identifié par product_id. Mesure : nombre de produits retenus. État des données : contenu de l'export fourni, sans filtre de période.

Le filtre doit traduire « supérieur ou égal à 1 ». La table products ne porte pas de date de création du produit : n'annonce pas un inventaire « des produits créés cette année » à partir de ce seul calcul.

Contrôler les filtres cumulés

Pars de tous les produits, conserve ceux dont le nombre de photos est renseigné, puis ceux qui en déclarent au moins une. Avant d'exécuter, prédis si chaque compte peut augmenter, diminuer ou rester identique.

SQL
SELECT COUNT(*) AS produits_total,
       COUNT(*) FILTER (WHERE product_photos_qty IS NOT NULL) AS photos_renseignees,
       COUNT(*) FILTER (WHERE product_photos_qty >= 1) AS au_moins_une_photo
FROM products;

Chaque colonne compte une population ; l'unique ligne de sortie résume la table. La troisième condition exclut déjà les valeurs non renseignées : les trois populations sont bien emboîtées. On doit retrouver produits_total >= photos_renseignees >= au_moins_une_photo.

Contrôler les étapes

Les comptes sont 32 951, 32 341, puis 32 341. Le premier filtre retire 610 produits dont le nombre de photos n'est pas renseigné. Le suivant ne retire rien sur ces données : tous les nombres renseignés sont au moins égaux à 1.

Deux définitions différentes peuvent donc produire le même nombre aujourd'hui. Cela ne les rend pas interchangeables pour un autre export. Un filtre ajouté à la même requête peut conserver l'effectif ; il ne peut pas l'augmenter.

Modifier le périmètre et expliquer l'écart

Écris maintenant la définition « produits déclarant au moins trois photos ». Construis une requête sur products avec un COUNT(*) et le filtre qui correspond à cette phrase. Avant de l'exécuter, prédis sa position par rapport aux trois comptes précédents.

Vérifier le nouveau périmètre

Le filtre est product_photos_qty >= 3. Tu dois compter 9 589 produits. L'écart avec « au moins une photo » est 22 752 produits ; ils déclarent une ou deux photos. Tu peux contrôler cet écart avec un filtre BETWEEN 1 AND 2. La différence vient du seuil retenu, pas d'une disparition de produits dans la source. Aucun de ces seuils n'est présenté comme une exigence métier : il faut choisir celui qui répond à la demande réelle.

Distinguer les lignes jointes des produits

Le besoin change : repérer les produits ayant une ligne d'article dans les commandes, toujours parmi ceux déclarant au moins une photo. Une même fiche produit peut être référencée par plusieurs lignes de order_items.

Avant d'exécuter, prédis si les deux comptes suivants doivent être égaux :

SQL
SELECT COUNT(*) AS lignes_article,
       COUNT(DISTINCT p.product_id) AS produits_distincts
FROM products AS p
JOIN order_items AS i ON i.product_id = p.product_id
WHERE p.product_photos_qty >= 1;
Contrôler l'objet compté après la jointure

La sortie donne 111 047 lignes d'article, mais 32 341 produits distincts. Après la jointureRapprocher deux tables sur une colonne commune, pour lire ensemble des informations qui sont stockées séparément., une ligne correspond à une ligne d'article, et non plus à un produit unique. COUNT(DISTINCT p.product_id) répond au comptage des produits.

Ici, le compte de produits reste égal au périmètre précédent : tous les produits retenus ont au moins une ligne d'article. Ce n'est pas une propriété garantie par une jointure interne. Sur une autre source, les produits sans ligne d'article seraient exclus. Sans filtre sur les commandes, ce calcul ne signifie pas non plus « produits livrés » ou « produits vendus cette année ».

Réécris ta définition en ajoutant cette condition d'existence d'une ligne associée. Si ta phrase décrit des produits mais ton calcul compte des lignes d'article, corrige l'un des deux avant de commenter le résultat.

Transfert autonome

Choisis une mesure de ton projet et produis deux périmètres défendables. Pour chacun, rends la définition, la requête, le résultat et une phrase qui explique la décision à laquelle il répond. Une autre personne doit pouvoir montrer la ligne SQL responsable de chaque différence entre les résultats.

Avant de partager, contrôle trois points : l'objet annoncé est celui compté, les exclusions sont explicites, et la période annoncée est portée par une date réellement disponible. Si les deux périmètres sont emboîtés, vérifie aussi l'ordre de leurs effectifs ; sinon, ne leur impose pas ce contrôle.