operations en sql

operations en sql - SQL/NoSQL - Programmation

Marsh Posté le 21-12-2004 à 14:26:05    

Salut à tous,
en fait je voulais savoir si il était possible de faire la soustraction des totaux de deux tables avec mysql.
Merci

Reply

Marsh Posté le 21-12-2004 à 14:26:05   

Reply

Marsh Posté le 21-12-2004 à 15:42:30    

Of course !
 
Select a.tot - b.tot  
from matablea a inner join matableb b  
on a.cle = b.cle
 
ou
 
Select a.tot - b.tot  
from matablea a, matableb b  
where a.cle = b.cle

Reply

Marsh Posté le 21-12-2004 à 15:45:49    

vttman2 a écrit :

Of course !
 
Select a.tot - b.tot  
from matablea a inner join matableb b  
on a.cle = b.cle
 
ou
 
Select a.tot - b.tot  
from matablea a, matableb b  
where a.cle = b.cle


je suis pas sûr que c'est ce qu'il voulait dire par "total"...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 16:10:43    

merci d'avoir répondu
je m'explique plus clairement:
en fait, j'ai une table recettes et une table dépenses avec dans chacune de ces tables un champ montant_ht.
j'aimerais donc faire une requete qui me donne le résultat montant ht de la table recettes - montant ht de la table dépenses.

Reply

Marsh Posté le 21-12-2004 à 16:11:45    

select (r.montant_ht - d.montant_ht)
from recettes r, depenses d
 
[edit]
 
Ceci était une grosse connerie...[:joce]


Message édité par skeye le 21-12-2004 à 16:26:49

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 16:22:39    

[quote]
select (r.montant_ht - d.montant_ht)  
from recettes r, depenses d
 
désolé je n'est pas eu le résultat attendu
 
il m'a afficher tout plein de chiffre ...
 
moi j'avais pensé à faire un select sum les champs montant_ht de la table recettes puis de la table dépenses et de soustraire le résultat mais j'arrive pas à récuperer les résultat des deux select sum...
en tout cas merci de m'aider

Reply

Marsh Posté le 21-12-2004 à 16:26:22    

Tu avais pas précisé la somme des colonnes dans ton post précédent...;)
En plus je réalise que ma réponse est stupide... :whistle:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 16:29:55    

Ca doit être faisable avec un truc du style

Code :
  1. select sum(montant) as total
  2. from
  3. (
  4. select sum(montant_ht) as montant
  5. from recettes
  6. union
  7. select sum(0 - montant_ht) as montant
  8. from depenses
  9. )


 
Mais je peux me tromper...[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 16:30:28    

c'est pas grave ...

Reply

Marsh Posté le 21-12-2004 à 16:47:29    

non ...ça ne fonctionne pas .
mais je me demande si ma vesion de mysqm supporte les requêtes imbriquées ...

Reply

Marsh Posté le 21-12-2004 à 16:47:29   

Reply

Marsh Posté le 21-12-2004 à 16:48:12    

tchouvince a écrit :

non ...ça ne fonctionne pas .
mais je me demande si ma vesion de mysqm supporte les requêtes imbriquées ...


quelle version?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 16:50:20    

j'ai la mysql-3.23.54a-11

Reply

Marsh Posté le 21-12-2004 à 16:51:41    

ahhhhhhh non ça marchera pas.
Je ne vois pas de solution là-dessus en 1 requête...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 17:24:28    

et avec la 4.0.23 ça marchera ?

Reply

Marsh Posté le 21-12-2004 à 17:27:01    

tchouvince a écrit :

et avec la 4.0.23 ça marchera ?


à partir de 4.11 les requêtes imbriquées si mes souvenirs sont bons.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 17:27:28    

Sinon tu peux le faire en 2 fois, non? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-12-2004 à 17:30:48    

4.11 ? ok  
sinon je vais tenter en deux fois
 
en tout cas merci beaucoup de ton aide

Reply

Marsh Posté le 21-12-2004 à 17:59:36    

et pourquoi pas un truc du genre:  

Code :
  1. SELECT SUM(r.montant_ht)-SUM(d.montant_ht) AS total
  2. FROM recettes r, depenses d

Reply

Marsh Posté le 21-12-2004 à 18:52:02    

Citation :


Code :
 
SELECT SUM(r.montant_ht)-SUM(d.montant_ht) AS total  
FROM recettes r, depenses d
 


 
ça marche pas mais à mon avis c'est la bonne voie
je pense qu'il manque un truc mais je sais pas encore koi.
en tout cas merci de ton aide

Reply

Marsh Posté le 21-12-2004 à 20:34:27    

non, ça marchera pas je pense, ça va faire un produit cartésien (en gros renvoyer toutes les combinaisons de lignes des deux tables) et sommer sur toutes ces lignes !
 
Il faut faire les 2 select à la suite et faire la soustraction, plutôt que de se casser la tête à essayer de tout faire en une requête (ce qui ne simplifie rien, n'est pas plus rapide, etc.).

Reply

Marsh Posté le 21-12-2004 à 20:39:12    

et donc tu ferais comment toi ?

Reply

Marsh Posté le 21-12-2004 à 20:41:06    

Code :
  1. SELECT SUM(r.montant_ht) AS recettes
  2. FROM recettes r;
  3. SELECT SUM(d.montant_ht) AS depenses
  4. FROM depenses d;


 
et ensuite, dans le code, la soustraction ...

Reply

Marsh Posté le 22-12-2004 à 09:37:36    

ok merci. Je vais essayer de faire ça en php

Reply

Marsh Posté le 23-12-2004 à 11:00:38    

ça y'est j'ai enfin trouvé comment faire en sql.
pour ceux que ça interesse voici le code :
 
CREATE TABLE prov TYPE=HEAP select sum(montant_ht) as sp from recettes union select sum(montant_ht) as sp from depenses;
 select max(sp) - min(sp) FROM prov;
 
et voila le tour est joué !

Reply

Marsh Posté le 23-12-2004 à 11:07:36    

tchouvince a écrit :

ça y'est j'ai enfin trouvé comment faire en sql.
pour ceux que ça interesse voici le code :
 
CREATE TABLE prov TYPE=HEAP select sum(montant_ht) as sp from recettes union select sum(montant_ht) as sp from depenses;
 select max(sp) - min(sp) FROM prov;
 
et voila le tour est joué !


[:el g]
Tu le fais en 2 fois, exactement comme je te disais, donc...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-12-2004 à 11:38:19    

eh oui ! tu avais raison ! mais à propos tu sais pas si il existe un truc comme select sum pour soustraire et non additionner ?

Reply

Marsh Posté le 23-12-2004 à 11:41:05    

tchouvince a écrit :

eh oui ! tu avais raison ! mais à propos tu sais pas si il existe un truc comme select sum pour soustraire et non additionner ?


[:urd]
sum(-(tontrucàsoustraire)) ? [:autobot]


Message édité par skeye le 23-12-2004 à 11:41:15

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-12-2004 à 11:51:08    

non, ça fait l'addition et ça met un - devant !

Reply

Marsh Posté le 23-12-2004 à 11:54:11    

tchouvince a écrit :

non, ça fait l'addition et ça met un - devant !


...bah c'est pas ce que tu veux? [:opus dei]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 23-12-2004 à 21:28:14    

no ce que je veux c'est par exemple 50-20=30
avec sum(-(tontrucàsoustraire)) , ça afficherai dans ce cas -70! voila

Reply

Marsh Posté le 23-12-2004 à 21:35:59    

tchouvince a écrit :

no ce que je veux c'est par exemple 50-20=30
avec sum(-(tontrucàsoustraire)) , ça afficherai dans ce cas -70! voila


Alors tu peux pas...si tu gardes la méthode précédente il suffit d'insérer directement les valeurs négatives dans ta table temporaire...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed