Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 11h46   #1
Invité de passage
 
Inscription : juillet 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 3
Points : 1
Points : 1
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.
fredo27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h34   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 13h47   #3
Invité de passage
 
Inscription : juillet 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 3
Points : 1
Points : 1
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
fredo27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 12h13   #4
Membre régulier
 
Homme Julien SIMON
Ingénieur systèmes et réseaux
Inscription : février 2006
Messages : 100
Détails du profil
Informations personnelles :
Nom : Homme Julien SIMON
Âge : 26
Localisation : France

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

Informations forums :
Inscription : février 2006
Messages : 100
Points : 99
Points : 99
Bonjour,

Pour les fourchettes de prix tu peux utiliser un regroupement par tranche :
Code :
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
MightyDucks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h46.


 
 
 
 
Partenaires

Hébergement Web