IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête mysql complexe


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Par défaut Requête mysql complexe
    Bonjour,

    je cherche a constituer une requete a mon sens assez complexe a destination d'un tableau de synthese.

    3 Tables : articles / ventes /magasins

    table article :
    ->code_article
    ->type_article
    ->nom_article
    table ventes :
    ->numero_vente
    ->numero_ticket
    ->numero_magasin
    ->date_vente
    ->code_article
    table magasins:
    ->code_magasin
    ->nom_magasin

    Le traitement doit se faire en 2 etapes. (a mon sens)

    trouver dans la table ventes tous articles vendus entre plusieurs fourchettes de prix :

    0 à 100> G1
    100 à 200 > G2
    200 à 300 >g3

    J'y arrive sans soucis dans un CASE en excluant les types 99999 (car les cartes G sont vendues comme des articles à part entière,donc il faut les différencier des autres)

    je sors une structure telle que celle ci :

    [date_vente|typeG]

    jusque là , tout va bien ...

    dans un 2eme temps, faire correspondre par jointure articles et ventes sur le code_article qui correspond à type_precis (type_article=9999)

    (la c'est bon !)

    Ce qui me donne la liste de toutes les ventes avec le type_article 9999 .. Seulement, chaque type_article = 9999 (nombre fixe pour l'instant, mais certainement amené à évoluer), me retourne textuellement :

    code_article|type_article|nom_article|date
    ============================
    2548|99999|"Carte type G1"|20110901
    4782|99999|"Carte type G2"|20110705
    12458|99999|"Carte type G3"|20110504

    L'objectif final de la requete est le suivant :

    Indiquer pour chaque magasin entre 2 dates :
    le nombre de cartes de chaque type vendu (en qté)
    le % correpondant au nombre de cartes vendues de ce type divisé par le nombre d'articles éligibles (cf : sortie de requete CASE)

    Résultat attendu :

    Magasin | Cartes G1 (nb) | Cartes G1 (%) | Cartes G2 (nb)| Cartes G2 (%) | Cartes G3 (nb) | Cartes G3 (%)
    =======================================
    Magasin 1 | 100 | 8 % | 50 | 78 % | 3| 6% |
    Magasin 2 | 10| 83% | 13| 6% | 79| 45% |

    Problème : je ne sais pas comment faire correspondre d'un cotés mes articles avec des libelles textuels avec en face mes ventes codfiées en fonction de leur montant (en gros faire coorespondre G1 avec "Carte type G1", et ensuite faire les operations)

    Pour rajouter une précision sur la finalité, l'idée est de comptabiliser tous les articles susceptibles d'etre eligible à une carte (de part leur fourchette de prix) et les mettre en rapport avec le nombre de cartes réellement vendues pour cette catégorie d'articles.

    Précision complémentaire, la requete est à intégrer dans un outil de BI dans lequel il m'est possible de générérer un tableau croisé à partir du moment où le nombre de colonnes à basculer est statique.

    Autre précision, nous ne sommes pas dans une structure completement relationnelle, mais dans un datamart très mal concu dans lequel il n'existe aucune clé ou index, et les temps de traitements sont bien supérieurs au meme requetage dans la structure relationnelle classique .

    Je vous concede qu'un datamart est "censé" permettre des calculs (notamment de BI) accélérés de part une dénormalisation des certaines informations ... Mais la il n'est vraiment pas "optimisé" ^^

    Toute aide sera la bienvenue.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    On va probablement te répondre que ce que tu veux faire c'est de la cosmétique et que cela ne relève pas de SQL mais d'un langage procédural client du SGBD.
    Et on aura raison. Les tableaux croisés dynamiques qu'autorisent MS Access ou MS Excel , n'existent pas en MySQL.
    Tu peux, éventuellement, t'inspirer de ce que je présente dans mon article afférent à l'émulation d'un tableau croisé dynamique avec MySQL et PHP, mais tu aurais plus vite fait d'extraire les données en CSV, de les importer sous un tableur pour les mettre au format attendu.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3
    Par défaut
    merci du conseil, mais la réponse tombe completement a coté !

    j'ai besoin de passer par mysql
    j'ai besoin de faire la resitution avec l'outil de BI de mon client
    Il est necessaire de l'avoir en temps reel ...


    Toute proposition est la bienvenue

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Transports

    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    Bonjour,

    Pour les fourchettes de prix tu peux utiliser un regroupement par tranche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) FROM caisse_ventes GROUP BY (prix_ht < 10),(prix_ht < 50);
    Cette requête produit le nombre de ventes effectuées sur 3 tranches :
    de 0 à 10 EUR
    de 10 à 50 EUR
    de 50 à +INF EUR

Discussions similaires

  1. Requête MYSQL LIKE particulière
    Par TheDarkLewis dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/12/2004, 15h50
  2. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 16h18
  3. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  4. surcharge de requête MySQL
    Par simoryl dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2004, 10h43
  5. requête mysql sous php
    Par remi59 dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2003, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo