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 :

SUM du résultat de deux requetes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 16
    Points
    16
    Par défaut SUM du résultat de deux requetes
    Je souhaiterais avoir une requete qui me calcule total qui est égal à totalEns + totalDecharge qui sont respectivement le résultat de chacune des requetes ci dessous.
    Comment faire une seule requete à partir des deux suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT sum(nbre_heure_devant_etu*type_heure_coef) AS totalEns
    FROM (enseignement INNER JOIN utilisateur ON
    enseignement.user_id = utilisateur.user_id) INNER JOIN type_heure ON
    enseignement.type_heure_id = type_heure.type_heure_id
    WHERE utilisateur.user_id = 345
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT sum(total_heure_decharge) AS totalDecharge 
    FROM decharge INNER JOIN utilisateur ON
    decharge.user_id = utilisateur.user_id
    WHERE utilisateur.user_id = 345

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 16
    Points
    16
    Par défaut j'ai trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT(SELECT sum(nbre_heure_devant_etu*type_heure_coef) AS totalEns
    FROM (enseignement INNER JOIN utilisateur ON
    enseignement.user_id = utilisateur.user_id) INNER JOIN type_heure ON
    enseignement.type_heure_id = type_heure.type_heure_id
    WHERE utilisateur.user_id = 345) + (
    SELECT sum(total_heure_decharge) AS totalDecharge 
    FROM decharge INNER JOIN utilisateur ON
    decharge.user_id = utilisateur.user_id
    WHERE utilisateur.user_id = 345) AS total;

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Votre distinct est inutile.

    Vous avez fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (SELECT_1) + (SELECT_2)
    Vous auriez pu également faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT s1.sum + s2.sum
    FROM (SELECT_1) as s1 CROSS JOIN (SELECT_2) as s2
    Mais les performances devraient être similaires.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Valeur nulle
    Merci pour ta réponse
    Ma requete fonctionne sauf si totalEns ou totalDecharge ne contiennent pas de résultat. Le calcul ne me retourne rien car null ne s'additionne pas.
    J'ai essayé de mette IFNULL ou COALESCE sans résultat.
    Que faire ?
    merci

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Coalesce est bien la fonction à utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT coalesce((SELECT_1), 0) + coalesce((SELECT_2), 0)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    merci grace à la reponse cela fonctionne, il faut mettre les ifnull sur le premier select
    merci beaucoup. voici le resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT IFNULL(totalEns,0) + IFNULL(totalDecharge,0)
    FROM (SELECT sum(nbre_heure_devant_etu*type_heure_coef) AS totalEns
    FROM (enseignement INNER JOIN utilisateur ON
    enseignement.user_id = 345) INNER JOIN type_heure ON
    enseignement.type_heure_id = type_heure.type_heure_id
    WHERE utilisateur.user_id = 345) AS totalEns CROSS JOIN (SELECT sum(total_heure_decharge) AS totalDecharge 
    FROM decharge INNER JOIN utilisateur ON
    decharge.user_id = utilisateur.user_id
    WHERE utilisateur.user_id = 345) As totalDecharge

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Points : 16
    Points
    16
    Par défaut COALESCE et IFNULL ok
    Je viens d'essayé avec COALESCE et cela fonctionne aussi et je suis sous mysql
    merci beaucoup pour ta réponse rapide

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

Discussions similaires

  1. [MySQL] fusionner le résultat de deux requetes des serveurs differents
    Par diengkals dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/03/2014, 16h02
  2. Réponses: 5
    Dernier message: 08/03/2010, 14h09
  3. résultats de deux requetes affichés ensembles
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/08/2007, 09h31
  4. Réponses: 7
    Dernier message: 14/10/2005, 20h00
  5. fusionner le résultat de deux requetes
    Par sami_c dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/05/2004, 09h56

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