Aller au contenu
guide technique

Poser des questions à MySQL en langage naturel

Préparez des rapports MySQL de ventes et d'opérations, examinez le SQL et vérifiez jointures, fuseaux, authentification et fraîcheur du réplica avant réutilisation.

Par l'équipe Datarelix · Publié le · Mis à jour le · Vérifié le

Un rapport opérationnel peut partir d’une question précise : « Quelles commandes payées devaient être expédiées avant le 8 septembre et n’avaient pas encore d’expédition enregistrée à cette échéance ? » Datarelix produit une requête MySQL en lecture seule et affiche les lignes correspondantes. Il faut un accès aux champs utiles, une date de référence et une définition de l’expédition : la requête découle de votre formulation et du schéma, comme l’explique comment le text-to-SQL génère les requêtes, et ces définitions déterminent ce qu’elle renvoie.

Définir ce que représente une ligne

Dans cet exemple, chaque ligne de orders représente une commande. ship_by indique l’expédition promise et shipped_at l’expédition réelle. Les horodatages utilisent le fuseau retenu pour le rapport. Les commandes annulées sont exclues.

SELECT order_id, ship_by, shipped_at
FROM orders
WHERE status <> 'cancelled'
  AND paid_at < '2026-09-08 00:00:00'
  AND ship_by < '2026-09-08 00:00:00'
  AND (shipped_at IS NULL OR shipped_at >= '2026-09-08 00:00:00')
ORDER BY ship_by, order_id;

La borne est exclusive : une commande attendue exactement à minuit le 8 septembre n’est pas en retard dans ce rapport. Une commande expédiée après cette borne reste dans le bilan historique. Si la base écrase les anciens statuts, vérifiez quels états passés peuvent réellement être reconstitués.

CommandeExpédition promiseExpédition réelle
10422026-09-05 10:00Non enregistrée
10562026-09-07 16:002026-09-08 09:00

Vérifiez une commande en retard connue et une commande à l’heure avant de répartir les actions à mener.

Connecter une source MySQL autorisée

Utilisez vos informations de connexion approuvées si vous les avez. Sinon, demandez au responsable l’hôte, le port, la base, les identifiants et les exigences TLS. Un compte dédié doit pouvoir lire les tables utiles sans droits d’administration superflus. La source doit être joignable depuis Datarelix ; MySQL fait partie des sources prises en charge.

Le guide de connexion MySQL détaille les champs et les autorisations. Vérifiez la version installée et le module d’authentification. Les versions modernes utilisent caching_sha2_password, dont l’authentification complète demande une connexion sécurisée ou un échange de mot de passe RSA adapté. Ne passez pas à un ancien module pour contourner une erreur. Documentation d’authentification MySQL

Le rapport doit-il lire un réplica ?

Un réplica de lecture peut déporter le travail de reporting, mais présenter un retard sur la base principale. Cela compte si vous relancez des commandes expédiées quelques minutes plus tôt. Demandez comment vérifier ce retard et définissez la fraîcheur nécessaire. Présentation de la réplication MySQL

Le choix d’un réplica ne garantit ni des droits limités à la lecture ni une bonne définition métier. Examinez les autorisations du compte et les horodatages utilisés.

Un second usage : les ventes mensuelles par articles

L’analyste peut passer d’une liste d’anomalies opérationnelles à une tendance commerciale. Dans un autre schéma, demandez : « Affichez la valeur des commandes terminées par mois d’avril à juin 2026, avant remboursements, en EUR. » Chaque article appartient ici à une seule commande et unit_price_eur correspond à la définition convenue du prix.

SELECT DATE_FORMAT(o.ordered_at, '%Y-%m') AS month,
       SUM(i.quantity * i.unit_price_eur) AS completed_order_value_eur
FROM orders AS o
JOIN order_items AS i ON i.order_id = o.order_id
WHERE o.status = 'completed'
  AND o.ordered_at >= '2026-04-01'
  AND o.ordered_at < '2026-07-01'
GROUP BY DATE_FORMAT(o.ordered_at, '%Y-%m')
ORDER BY month;

DATE_FORMAT donne le libellé mensuel ; l’intervalle inclut le 1er avril et exclut le 1er juillet. La requête additionne les articles une seule fois à leur niveau. Elle ne soustrait pas les remboursements et ne complète pas les mois absents. Additionner un total de commande répété sur chaque article gonflerait le résultat.

Examinez les enregistrements d’un mois avant d’ajouter une courbe. Les utilisateurs métier confirment le statut d’une vente terminée ; les analystes vérifient jointure, montant et bornes avec les étapes de vérifier le SQL et les résultats générés par IA. Le SQL d’un rapport existant sert de comparaison si sa définition correspond.

Les réglages MySQL qui influencent un rapport

Réglage ou typePoint à examiner
ONLY_FULL_GROUP_BYChaque valeur choisie doit être compatible avec le regroupement ; ne désactivez pas ce mode pour accepter un calcul inexpliqué
TIMESTAMPLa conversion liée au fuseau de session peut modifier la borne temporelle
DATETIMEPas de conversion automatique de fuseau ; établissez la convention de l’application
Fuseaux nommésConfirmez la présence des informations nécessaires à la conversion sur le serveur
Casse des tables et collationRespectez les noms découverts et les règles de comparaison entre environnements

MySQL documente les règles de regroupement, dont la dépendance fonctionnelle. Si le mode est désactivé, une valeur non regroupée peut être choisie de façon non déterministe. Ajouter un nom de client à un total régional ne transforme pas celui-ci en rapport par client. Règles GROUP BY MySQL

Pour les dates, confirmez type de colonne et convention de session au lieu de supposer tous les horodatages en UTC. Les conversions de fuseaux nommés dépendent aussi du serveur. Fuseaux horaires MySQL

Formuler une demande d’accès précise

Indiquez base, tables ou vues, période et fréquence d’actualisation attendues. Si vous avez déjà des informations de connexion autorisées, utilisez-les directement. Si un accès doit être créé, le responsable choisit le compte et la restriction d’hôte compatibles avec le trajet réseau du service.

MySQL identifie les comptes par utilisateur et hôte. Une autorisation d’hôte large ne remplace pas la décision sur les clients admis. Après création, examinez les droits effectifs dans l’outil d’administration habituel ; CREATE USER et GRANT ne nécessitent pas de FLUSH PRIVILEGES ensuite. La référence de connexion réunit ces détails.

Vérifier relations et fraîcheur avant enregistrement

En l’absence de clés étrangères, une relation déduite demande une revue. Des noms de colonnes identiques ne prouvent pas une correspondance unique. Consignez les clés et la granularité confirmées comme contexte du schéma et définitions métier pour que les questions suivantes les réutilisent. C’est important pour compter les retards comme pour sommer les ventes : plusieurs articles ou événements peuvent appartenir à une commande.

Notez si la connexion vise le primaire ou un réplica de reporting. Définissez la fraîcheur acceptable pour la décision et faites préciser le suivi du retard de réplication. Une tendance hebdomadaire et une liste utilisée pour contacter les clients sur les expéditions du jour peuvent tolérer des délais différents.

Si le rapport diffère de l’application, comparez horodatages, filtres et fraîcheur du point d’accès avant de conclure à une erreur SQL. Gardez administration et écritures dans les outils autorisés ; Datarelix fournit un résultat de reporting, pas une mise à jour des commandes.

Construire une vue opérationnelle réutilisable

Commencez par le tableau pour examiner les cas individuels. Demandez ensuite le nombre de commandes en retard par date promise ou par entrepôt. Vérifiez que le regroupement compte les commandes, pas leurs lignes d’articles. Enregistrez un graphique dans un tableau de bord privé après contrôle.

L’actualisation manuelle relance la requête enregistrée. La date fixe ci-dessus ne change pas ; un suivi quotidien demande une borne relative convenue. Datarelix produit un rapport sans modifier les statuts ni déclencher les expéditions.

Le guide des commandes en retard explique la comparaison des périodes et le choix du dénominateur d’un taux. Si MySQL n’est pas encore connecté, commencez par le démarrage rapide.