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 23/11/2011, 15h34   #1
Invité de passage
 
Homme
Étudiant
Inscription : mars 2011
Messages : 14
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 : 14
Points : 4
Points : 4
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 :
SELECT count(etat_produit) FROM Table_A WHERE etat_produit LIKE Active;
Résultat :
Citation:
---------------
|etat_produits|
---------------
| 4 |
---------------
Requête Table_B
Code :
SELECT count(etat_produit) FROM Table_B WHERE etat_produit LIKE Active;
Résultat :
Citation:
---------------
|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 :
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
shral est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h49   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 646
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 646
Points : 2 643
Points : 2 643
bonjour,

quelquechose comme ceci :
Code :
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
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 16h17   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Pourquoi faire une table par mois ?
Un SGBD n'est pas un tableur !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 14h52   #4
Invité de passage
 
Homme
Étudiant
Inscription : mars 2011
Messages : 14
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 : 14
Points : 4
Points : 4
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.
shral est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h12   #5
Invité de passage
 
Homme
Étudiant
Inscription : mars 2011
Messages : 14
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 : 14
Points : 4
Points : 4
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
shral est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 15h27   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 646
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 646
Points : 2 643
Points : 2 643
Ca marche mais ca n'affiche pas de résultat ?

J'avoue ne pas saisir la subtilité ici ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 10h45   #7
Invité de passage
 
Homme
Étudiant
Inscription : mars 2011
Messages : 14
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 : 14
Points : 4
Points : 4
Bonjour punkoff

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

Code :
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 :
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
Type de fichier : jpg requete.jpg (129,0 Ko, 1 affichages)
shral est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h08   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 646
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 646
Points : 2 643
Points : 2 643
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 :
1
2
3
 
mysql> SELECT 1 + 1 FROM DUAL;
        -> 2
Mais au vu de :
Code :
1
2
3
 
mysql> SELECT 1 + 1;
        -> 2
Je suppose que la trequête comme ceci devrait fonctionner :
Code sql :
1
2
3
 
SELECT (( (SELECT count(*) FROM tableB WHERE etat_produit = 'Active') / 
(SELECT count(*) FROM tableA WHERE etat_produit = 'Active')) - 1) * 100
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 11h27   #9
Invité de passage
 
Homme
Étudiant
Inscription : mars 2011
Messages : 14
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 : 14
Points : 4
Points : 4
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
shral est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h42.


 
 
 
 
Partenaires

Hébergement Web