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 :

[sql] [oracle] éliminer les doublons dans sum ?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut [sql] [oracle] éliminer les doublons dans sum ?
    Bonjour,

    j'ai un pseudo result de ce type

    id montant
    1 1000
    2 2000
    1 1000
    ...
    Comment je peux faire la somme des montant sans tenir compte des doublons ?

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct id, sum(montant) ...
    mais ça ne marche pas.

    Si qq'un a une petite idée, je suis preneur.

    Merci d'avance!

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Si mon intuition est bonne, le distinct est fait au dernier moment, donc après que la somme ait été faite. Mais comment obtiens tu cette table?
    Tu as essayé de passer par une vue? celle ci ferait le distinct et tu ferais ta somme dessus.
    Pensez au tag

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    D'abord, vous faites le select distinct, et ensuite vous faites la somme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT ID, Sum(Montant)
      FROM (SELECT Distinct ID, Montant
              FROM ... )
     GROUP BY ID;

  4. #4
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Ah ça c'est joliment fait! Je ne connaissais pas cette syntaxe merci!
    Pensez au tag

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    Effectivement, la soluce de LeoAnderson marche très bien. Pourtant, ça donne l'impression qu'il faut deux boucles (une pour éliminer les doublons, une pour compter). Je me demande si on peut le faire en une seule boucle???

    Adjanakis : ce résultat viens d'une énorme requête de stats. Comme les conditions sont dynamiques, je peux pas utiliser les vues.

    Merci à tous!

  6. #6
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Salut,

    pour le faire en une étape tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select id, sum(distinct result) from test
    group by id

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    nantais : en fait, mon problème est un peu plus compliqué.

    J'ai le résultat de ce type

    id montant nom
    1 1000 a
    2 2000 a
    3 3000 b
    4 4000 b
    1 1000 a
    ...

    Et ce que je veux récupérer c'est le nombre d'id distinct et la somme des montants par nom comme suit :

    2 3000 a
    2 7000 b
    ...

  8. #8
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Et avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select count(distinct id), sum(distinct result) , nom from test
    group by nom

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    j'ai pas encore essayé ta requête. Mais j'imagine que les deux clause distinct sont disjointes. Et ça peut ne pas marcher dans ce cas :

    id montant nom
    1 1000 a
    2 1000 a

    ???

  10. #10
    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
    Depuis que je lis ce thread, je ne suis pas certain de comprendre, dans le cas
    1 1000 a
    2 1000 a
    tu veux obtenir : a, 2 , 2000

    et dans le cas
    1 1000 a
    2 1500 a
    1 1000 a
    tu veux obtenir : a, 2 , 2500 c'est bien cela ?
    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

  11. #11
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    oui, c'est exactement ça.

  12. #12
    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
    J'ai oublié un cas :
    1 1000 a
    1 1500 a
    2 1000 a
    1 1000 a

    là tu veux a, 2, 3500

    si oui, je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(distinct id), sum(result) , nom 
    from (select distinct nom, result, id 
          from test )
    group by nom
    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

  13. #13
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    Ce cas de figure n'existe pas pour moi.

    Citation Envoyé par pgibone
    J'ai oublié un cas :
    1 1000 a
    1 1500 a

    2 1000 a
    1 1000 a

    là tu veux a, 2, 3500

    si oui, je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(distinct id), sum(result) , nom 
    from (select distinct nom, result, id 
          from test )
    group by nom
    Ta réponse est semblable à celle de LeoAnderson d'où ma question sur la possibilité d'éliminer la sous requête.
    [/b]

  14. #14
    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
    Citation Envoyé par trungsi
    Ce cas de figure n'existe pas pour moi.
    Effectivement si ce cas n'existe pas ma réponse = celle de LéoAnderson.

    Toutes les solutions qui me viennent à l'esprit utilisent des sous-requêtes
    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

  15. #15
    Membre régulier
    Inscrit en
    Octobre 2002
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 108
    Points : 98
    Points
    98
    Par défaut
    Merci !

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

Discussions similaires

  1. [WD17] Recherche dans les fichiers en éliminant les doublons
    Par tun_01 dans le forum WinDev
    Réponses: 30
    Dernier message: 01/04/2014, 21h05
  2. Éliminer les doublons dans un fichier sous bash
    Par BIG123 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/01/2013, 15h20
  3. éliminer les doublons dans un tableau
    Par elpatriota dans le forum VBScript
    Réponses: 3
    Dernier message: 21/03/2011, 12h46
  4. Réponses: 10
    Dernier message: 23/11/2009, 22h49
  5. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37

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