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

Langage SQL Discussion :

somme de 2 sommes (provenant de 2 requetes differentes)


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut somme de 2 sommes (provenant de 2 requetes differentes)
    Bonjour,

    Je viens de visiter ce forum qui est assez passionnant quand on apprécie le SQL.
    J'ai une demande assez pointue.
    Je m'excuse d'avance, mais voici en gros ce que je recherche.
    Je souhaite avoir une somme (nommée total) qui serait le resultat de deux requêtes distinctes (avec clause where chacune), de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT sum((sum pts1 FROM requete 1 where condition1) + (sum pts2 FROM requete 2 where condition 2)) as total
    D'avance merci d’éclairer ma lanterne.

    David

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT sum(toto) as total
       FROM
    ( SELECT tutu as toto
        FROM  tata
      WHERE monChamp=1
     UNION
       SELECT tutu as toto
        FROM  tata
      WHERE monChamp=2
    )
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Attention : Le UNION ALL est obligatoire ici
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut on approche....
    Tout d abord un grand merci pour votre rapidité et votre participation à la résolution de mon problème.
    La somme des 2 sommes ne fonctionne toujours pas.
    Sachant que les 2 sommes faites independemment focntionnent parfaitement.

    En php (cela n est pas le problème mais je vous transcrit le tout), cela donne a peu près ça. Ou est le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <? 
    $query = "Select sum(pts) as total from ((SELECT sum(pts_home) as pts FROM table 1"; 
    $query .= "where condition 1)"; 
    $query .= "union all (SELECT sum(pts_away) as pts FROM table 2"; 
    $query .= "where condition 2))"; 
    $result = mysql_query($query); 
    while ($val = mysql_fetch_array($result)) { ?>
    D avance merci

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Merci de jeter un oeil sur les Conseils à lire avant de poster.

    En particulier :
    Citation Envoyé par Fred_D
    Ce forum est dédié au langage SQL, merci donc de bien vouloir vous limiter à celui-ci lors de la citation de votre code. Notamment le code PHP, étant difficilement lisible pour les profanes veuillez l'éviter
    Citation Envoyé par dad80
    La somme des 2 sommes ne fonctionne toujours pas.
    Merci également de préciser la nature de l'erreur : message, ou résultat non conforme ?
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    il s agit de my SQL 4.1.9 dans easy php 1.8.0.1

    En SQL uniqument, ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select sum(pts) as total 
    from ((SELECT sum(pts_home) as pts 
    FROM table 1 where condition 1 ) 
    union all 
    (SELECT sum(pts_away) as pts 
    FROM table 2 
    where condition 2 ))

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par dad80
    En SQL uniqument, ça donne ça:
    cf les règles, pour une meilleure lisibilité, il est demandé d'indenter les requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select sum(pts) as total 
      from ((SELECT sum(pts_home) as pts FROM table 1 where condition 1 )
             union all 
            (SELECT sum(pts_away) as pts FROM table 2 where condition 2 ))
    Citation Envoyé par dad80
    il s agit de my SQL 4.1.9 dans easy php 1.8.0.1
    Donc ça devrait être bon pour les sous-requêtes :
    http://mysql.developpez.com/faq/?pag..._sous_requetes

    Edit : pour en revenir à notre souci :
    Citation Envoyé par Xo
    Merci également de préciser la nature de l'erreur : message, ou résultat non conforme ?
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En fait, lorsque j effectue cette requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select sum(pts) as total 
    from ((SELECT sum(pts_home) as pts FROM table 1 where condition 1 ) 
    union all 
    (SELECT sum(pts_away) as pts FROM table 2 where condition 2 ))
    j ai la réponse suivante de la part de mon mySQL chéri:

    #1248 - Every derived table must have its own alias

  9. #9
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Il te demande des alias apparement. Essaye d'en rajouter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUM(pts) AS TOTAL
      FROM ((Select SUM(A.pts_home) AS pts FROM table1 A where A.MonChamp = ...)
             UNION ALL
            (Select SUM(B.pts_away) AS pts FROM table2 B where B.MonChamp = ...)
           )
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J ai procédé ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUM(zou+zou2) AS TOTAL 
    FROM ((Select SUM(A.pts_home) AS zou FROM table1 A where A.MonChamp = ...) 
    UNION ALL 
    (Select SUM(B.pts_away) AS zou2 FROM table2 B where B.MonChamp = ...) 
    )
    J ai donc donné comme MYSQL le souhaitait un alias différent à chaque resultat de sous requete : zou et zou2.
    Comment faire la somme de ces 2 resultats car c est là mon problème.
    Ce qui suit est il la bonne façon:SELECT SUM(zou+zou2)
    ??

  11. #11
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Pourquoi zou et zou2 ? Si tu essayes ma solution, ça ne fonctionne pas ? Sinon, met le même alias sur chacun des SUM(pts_home), car SUM(zou+zou2) ne fonctionnera pas.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je vais reprendre parce que en fait , j ai toujours ce problème d alias après avoir fait comme tu m'as dit.

    J'ai à l'origine 3 tables
    table 1
    table 2
    table 3

    Je cherche à faire la somme de 2 sommes...
    La 1ere somme provient d une requete sur les tables 1 et 2 jointes.
    La 2eme somme provient d une requete sur les tables 1 et 3 jointes.
    En SQL cela donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT SUM(pts) AS TOTAL
     
    FROM (
     
    (Select SUM(A.pts_home) AS pts FROM table1, table2 where jointure1)
     
    UNION ALL
     
    (Select SUM(B.pts_away) AS pts FROM table1,table3 where jointure2)
    )
    En faisant cela, MYSQL me demande donner un alias à chaque "sous table". Or ces 2 "sous-tables" sont en fait des jointures.
    Voilà, j espère avoir été suffisamment clair.
    D avance merci
    David

  13. #13
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    A priori, il demande un alias sur la table, et non sur le champs, essaye plutot quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUM(pts) AS TOTAL
      FROM ((Select SUM(A.pts_home) AS pts FROM table1 A where A.MonChamp = ...)
             UNION ALL
            (Select SUM(B.pts_away) AS pts FROM table2 B where B.MonChamp = ...)
           ) t
    Le 't' étant l'alias du super UNION ALL au dessus

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Points : 10
    Points
    10
    Par défaut re-up sorry!
    Bonjour à vous, je re-up le message car ça fait 4 jours que je planche sur une requète de ce type sans qu'elle fonctionne...

    la voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select constructeur.nom, sum(val) from(SELECT c.nom, count(*) AS val
    FROM certification AS cert
    INNER JOIN constructeur as c ON ( cert.nco = c.nco )
    GROUP BY c.nco
    UNION all
    SELECT c1.nom, count(*) AS val
    FROM formation AS form
    INNER JOIN constructeur as c1 ON ( form.nco = c1.nco )
    GROUP BY constructeur.nco) group by constructeur.nom
    J'ai 3 tables, une formation, une certification et une constructeur.
    le but est de compter les éléments (formations et certifications confondu) dispensées par les constructeurs.

    lorsque je teste tout ce qui est proposé sur le net je retombe toujours sur l'erreur #1248 - Every derived table must have its own alias


    et même en donnant des alias différents aux tables ou aux variables récupérées le problème est toujours là...


    je suis sous wampserver 2.0 mysql 5.1.36

    Si quelqu'un a une idée je suis toute ouïe!!!!
    Merci d'avance

  15. #15
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Rien de méchant, faut juste mettre un alias à ta subquery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT constructeur.nom, sum(val) FROM(SELECT c.nom, count(*) AS val
    FROM certification AS cert
    INNER JOIN constructeur AS c ON ( cert.nco = c.nco )
    GROUP BY c.nco
    UNION ALL
    SELECT c1.nom, count(*) AS val
    FROM formation AS form
    INNER JOIN constructeur AS c1 ON ( form.nco = c1.nco ) 
    GROUP BY constructeur.nco) unAliasAuPif
    GROUP BY constructeur.nom
    A+
    juva
    Juvamine

Discussions similaires

  1. [AC-2007] Pb de somme dans un état issu d'une requete analyse croisée
    Par gihel dans le forum Access
    Réponses: 4
    Dernier message: 25/07/2014, 00h36
  2. Réponses: 16
    Dernier message: 04/09/2006, 10h27
  3. Réponses: 2
    Dernier message: 27/06/2006, 20h16
  4. Affichage d'un tableau provenant d'une requete dans un tableau HTML
    Par w0lf dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2006, 19h05
  5. [CR 8.5] Calculer la somme d'une somme
    Par Frederic Vincent dans le forum Formules
    Réponses: 4
    Dernier message: 12/02/2004, 17h53

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