Mysql sum sur 2 tables

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 19:32

Bonjour,

J'essaye d'avoir le total de deux colonnes de deux tables mais les resultats sont faux...

Code: Tout sélectionner
select sum(r.nombre + t.nombre) from table1 as r, table2 as t


J'obtiens un chiffre énorme (119000) alors que le resultat devrait être 5200... 8O

Qu'est ce qui manque dans ma syntaxe?
Merci


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 19:38

Fais un
Code: Tout sélectionner
select * from table1 as r, table2 as t


Tu vas vite comprendre ce qui pose problème.

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 20:09

Ben non, je ne vois pas... Je remarque bien qu'il y a pletor de colonnes mais pourquoi, ça...


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 20:29

C'est parce que tu compte plusieurs fois le même nombre du à ta jointure mal faites (je pense).
Tu dois joindre entre deux colonnes normalement. Je ne peux pas t'en dire plus vu qu'on ne connaît pas la structure de tes tables.

Pour les jointures, préfère l'instruction JOIN.

Dolph
WRInaute impliqué
WRInaute impliqué
 
Messages: 631
Inscription: 1 Mar 2011

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 20:39

Un truc du style

Code: Tout sélectionner
SELECT SUM(nombre)
FROM table1
NATURAL JOIN table2


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 20:52

Recif a écrit:Qu'est ce qui manque dans ma syntaxe?
visiblement tu fais un produit cartésien de tes tables : chaque ligne est couplée avec chacune des lignes de l'autre table, vu que tu n'as pas défini de relation entre les tables.
Ce qui fait que si A contient 20 enr et B en contient 100, ton select en contiendra 20x100=2000 :wink:

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 20:57

J'ai trouvé un truc qui marche, mais je sais pas si c'est optimisé...

Code: Tout sélectionner
SELECT SUM(tmp.nombre)  FROM (         SELECT nombre
            FROM table1 where actif = '1'
        UNION ALL         
        SELECT nombre
            FROM table2 where actif = '1'
        UNION ALL         
        SELECT nombre
            FROM table3 where actif = '1'
    ) tmp;

Dolph
WRInaute impliqué
WRInaute impliqué
 
Messages: 631
Inscription: 1 Mar 2011

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 21:18

Ce qui revient à faire ce que j'ai écrit, non ?

J'ai pas testé, mais ça me semble identique...


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Mysql sum sur 2 tables

Message le Ven Mai 06, 2011 21:24

si tu as 3 tables, ça me parait correct

Recif
WRInaute impliqué
WRInaute impliqué
 
Messages: 816
Inscription: 25 Aoû 2004

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 7:37

Dolph a écrit:Un truc du style

Code: Tout sélectionner
SELECT SUM(nombre)
FROM table1
NATURAL JOIN table2


Marche pas... Résultat : "NULL"

Dolph
WRInaute impliqué
WRInaute impliqué
 
Messages: 631
Inscription: 1 Mar 2011

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 8:16

Nan mais faut l'adapter... :-)

Code: Tout sélectionner
SELECT SUM(t1.nombre + t2.nombre + t3.nombre)
FROM table1 t1
NATURAL JOIN table2 t2
NATURAL JOIN table3 t3
WHERE t1.actif = 1 &&  t2.actif = 1 &&  t3.actif = 1


Et j'suis sur qu'on peu encore optimiser le WHERE


Blount
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 430
Inscription: 18 Nov 2010

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 9:11

Ça irait plus vite en nous donnant la structure minimal des tables …

doudouseb
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 24
Inscription: 14 Mar 2006

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 9:54

Et ça :
SELECT (SELECT SUM(nombre) FROM table1) + (SELECT SUM(nombre) FROM table2)

Dolph
WRInaute impliqué
WRInaute impliqué
 
Messages: 631
Inscription: 1 Mar 2011

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 11:04

Ca fait 3 select...


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Mysql sum sur 2 tables

Message le Sam Mai 07, 2011 11:25

A mon avis niveau performance :
SELECT SUM(col1) FROM table1;
SELECT SUM(col2) FROM table2;
et tu ajoutes dans ton langage de prog.
A benchmarker mais je pense que ça sera 10 fois plus rapide que de faire des jointures ou autres.
Sinon il faudrait passer par une table temporaire.

Mysql sum sur 2 tables

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités