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 :

Comment obtenir la SUM de trois requêtes liées par UNION ?


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 392
    Points : 863
    Points
    863
    Par défaut Comment obtenir la SUM de trois requêtes liées par UNION ?
    bonjour,

    je voudrais faire en SQL ce que je fais en traitement post-db par le langage hôte.

    voilà j'ai une requête qu'ici je simplie par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select code1,un_chiffre from table 1
    union
    select code2,un_autre_chiffre from table 2
    union
    select code3,un_divers_chiffre from table 3
    j'obtiens cela :

    0001 10
    0002 30
    0001 5
    je voudrais obtenir ceci (la simple sum)

    0001 15
    0002 30

    Les champs code1,code2 et code3 sont de même type mais pas dans les mêmes tables sources.
    Les champs un_chiffre,un_autre_chiffre,un_chiffre_diff sont aussi de même nature (integer)

    y-a-t-il un moyen SQL d'avoir la somme de cette union?

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Le résultat d'une requête peut toujours être réutilisé comme si c'était une vue ou une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT c, sum(n)
    FROM (
      SELECT code1 c,un_chiffre n FROM TABLE 1
      union
      SELECT code2,un_autre_chiffre FROM TABLE 2
      union
      SELECT code3,un_divers_chiffre FROM TABLE 3)
    GROUP BY c

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 392
    Points : 863
    Points
    863
    Par défaut
    merci j'ai testé, ça fonctionne par contre, ça vient peut-être d epsotgres, mais après le FROM de la sous-requête je dois même un alias :

    SELECT c, sum(n)
    FROM
    (
    SELECT code1 c,un_chiffre n FROM TABLE 1
    union
    SELECT code2,un_autre_chiffre FROM TABLE 2
    union
    SELECT code3,un_divers_chiffre FROM TABLE 3
    ) AS MESREQUETES
    GROUP BY c

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Oui c'est peut être postgres, mais c'est en soi une bonne chose : tant les colonnes que les "vues" (ou "tables dérivées") devraient toujours être nommées dans l'absolu. Typiquement, si tu refaisais une jointure entre ce résultat et une autre table possédant potentiellement des colonnes de même nom, il te faudrait préfixer les colonnes utilisées pour lever l'ambiguité, ce qui ne peut se faire qu'en donnant des alias à tes "vues".

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2012, 08h21
  2. Réponses: 2
    Dernier message: 31/12/2011, 18h11
  3. Réponses: 2
    Dernier message: 01/12/2010, 10h59
  4. Réponses: 1
    Dernier message: 29/01/2007, 10h41
  5. Réponses: 1
    Dernier message: 25/06/2005, 09h40

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