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 :

Division entre deux tables


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Division entre deux tables
    Bonjour
    J'essaie de faire une évolution par mois entre deux tables de ma base de données.
    Dans ma base de données, j'ai deux table : Table_A et Table_B.
    Les deux tables ont mêmes noms et nombre de colonnes.
    Ma table est composée de plusieurs colonnes, mais les colonnes qui m'interessent sont : N° de produit, etat_produits, Montant

    Table_A Janvier
    -------------------------------------------------
    |N° de produit | etat_produits | Montant|blabla
    -------------------------------------------------
    | 001 | Active | 10 |xxxxx
    --------------------------------------------------
    --------------------------------------------------
    | 002 | Consommée | 10 |xxxxx
    -------------------------------------------------
    -------------------------------------------------
    | 003 | Active | 10 |xxxx
    -------------------------------------------------
    -------------------------------------------------
    | 004 | Consommée | 10 |xxxxx
    -------------------------------------------------
    -------------------------------------------------
    | 005 | Active | 10 |xxxxx
    -------------------------------------------------
    -------------------------------------------------
    | 006 | Active | 10 |xxxxx
    ------------------------------------------------

    Table_B Fevrier
    -------------------------------------------------
    |N° de produit | etat_produits | Montant|......
    -------------------------------------------------
    | 001 | Active | 10 |xxxxx
    --------------------------------------------------
    --------------------------------------------------
    | 002 | Consommée | 10 |xxxx
    -------------------------------------------------
    -------------------------------------------------
    | 003 | Active | 10 |xxx
    -------------------------------------------------

    Requête SQL :
    Requête Table_A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(etat_produit) from Table_A where etat_produit like Active;
    Résultat :
    ---------------
    |etat_produits|
    ---------------
    | 4 |
    ---------------
    Requête Table_B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(etat_produit) from Table_B where etat_produit like Active;
    Résultat :
    ---------------
    |etat_produits|
    ---------------
    | 2 |
    ---------------

    Évolution etat_produit : (( Table_B / Table_A ) - 1 ) * 100 = (( 2/4 ) -1 ) * 100 = -50 %
    Donc j'ai activé moitié moins de produits que le mois précédent. Donc une perte de 50%.

    MA QUESTION :
    Comment avoir ce résultat en une seule requête de deux tables différentes?

    Un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select ( count(a2.etat_produit) / count(a1.etat_produit) - 1 ) * 100
    from Table_A a1, Table_B a2
    where etat_produit like Active
    J'ai essayé toutes sortes de requêtes : inner join , jointure , union , ...
    mais en vain

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    quelquechose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select (( (select count(*) from tableA where etat_produit = 'Active') / 
    (select count(*) from tableA where etat_produit = 'Active')) - 1) * 100
    from dual

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Pourquoi faire une table par mois ?
    Un SGBD n'est pas un tableur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour CinePhil
    Je reçoit des données à la fin de mois donc j'ai crée une base complète où il y a tout les donnes et et une autre base où les données sont par mois pour faire des reports, évolution, etc.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci punkoff d'avoir répondu.
    J'ai utilisé ta requête et ça marche mais il n'affiche pas de résultat. C'est-à-dire il exécute la requête mais il n'y a pas de résultat.
    Dans ta requête, j'ai remplacer count(*) par nom de ma colonne count(etat_produit) que je veux compté mais ça ne marche non plus.

    Alors j'utilise WAMPSERVER version 2.1.
    Mysql version 5.1.53
    Je ne sais pas si ça peut vous aider.

    Dit moi qu'est ce que je peux faire de plus ?
    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Ca marche mais ca n'affiche pas de résultat ?

    J'avoue ne pas saisir la subtilité ici ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour punkoff

    Juste pour la correction de la requête que tu ma proposer, t'avais oublier de mettre "tableB" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (( (SELECT count(*) FROM tableB WHERE etat_produit = 'Active') / 
    (SELECT count(*) FROM tableA WHERE etat_produit = 'Active')) - 1) * 100
    FROM dual
    Je peux me tromper mais je pense le problème vient de "dual" car quand je remplace "dual" par mes deux nom de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (( (SELECT count(*) FROM tableB WHERE etat_produit = 'Active') / 
    (SELECT count(*) FROM tableA WHERE etat_produit = 'Active')) - 1) * 100
    FROM tableA, tableB
    , alors la requête marche mais le résultat n'est cohérent.
    Ci-joint une impression d'écran.

    Besoin de votre avis .
    Merci
    Images attachées Images attachées  

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Je pensais avoir vu dans la doc que la table dual existait sous MySQL.

    En fait, j'ia pris "dual" qui devrait être une table avec 1 seule colone et ne disposant que d'une ligne dedans.

    Ca permet de faire ce genre de chose.

    http://dev.mysql.com/doc/refman/5.5/en/select.html

    extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql> SELECT 1 + 1 FROM DUAL;
            -> 2
    Mais au vu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mysql> SELECT 1 + 1;
            -> 2
    Je suppose que la trequête comme ceci devrait fonctionner :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT (( (SELECT count(*) FROM tableB WHERE etat_produit = 'Active') / 
    (SELECT count(*) FROM tableA WHERE etat_produit = 'Active')) - 1) * 100

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci punkoff
    ça marche ta requete, problème résolu.
    Pour dual j'avais aussi vérifier dans la documentation, et dual est compatible à patir de MYSQL version 4.1 alors que je suis en version 5.1. C'est bizarre !!!!

    Bon Merci infiniment PunkOff
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Double somme (SUM) entre deux tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/02/2005, 22h26
  2. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  3. Transfert entre deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2004, 14h36
  4. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

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