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 :

Addition de valeur avec SUM


Sujet :

Langage SQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 911
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 911
    Points : 420
    Points
    420
    Par défaut Addition de valeur avec SUM
    Bonjour,

    j'ai la requête suivante qui fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT DSI_DISK2_VOLSER, DSI_DISK2_TAILLE_LOGIQUE FROM "EXPLT"."TF_DSI_DISK2" where DSI_DISK2_DTEXTRACT='2016-06-05' and DSI_DISK2_SUBTYPE='R1'
    maintenant, j'aimerais additionner toutes les valeurs DSI_DISK2_TAILLE_LOGIQUE pour obtenir une seule valeur

    J'ai donc tenté la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT DSI_DISK2_VOLSER, SUM(DSI_DISK2_TAILLE_LOGIQUE) FROM "EXPLT"."TF_DSI_DISK2" where DSI_DISK2_DTEXTRACT='2016-06-05' and DSI_DISK2_SUBTYPE='R1'

    mais squirrel il me demande d'utiliser GROUP BY avec la colonne : DSI_DISK2_VOLSER

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT DSI_DISK2_VOLSER, SUM(DSI_DISK2_TAILLE_LOGIQUE) FROM "EXPLT"."TF_DSI_DISK2" where DSI_DISK2_DTEXTRACT='2016-06-05' and DSI_DISK2_SUBTYPE='R1' GROUP BY DSI_DISK2_VOLSER
    mais ce n'est pas le résultat que je souhaite car je retrouve des valeurs additionnée avec les doublons que je souhaitais justement éliminer avec le DISTINCT...
    De plus je n'ai pas une seul valeur mais autant de ligne que la première requête....

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 881
    Points : 53 060
    Points
    53 060
    Billets dans le blog
    6
    Par défaut
    Utilisez une fonction fenêtrée avec SUM(...) OVER(...)

    A +

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Sur le principe, vous pouvez faire un SUM (DISTINCT ...) pour n'additionner que les valeurs distinctes...

    Mais est-ce que cela répond réellement au besoin fonctionel ?...

    un peu plus d'explications et idéalement un jeu d'essai + résultat attendu aideraient à mieux comprendre...

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 911
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 911
    Points : 420
    Points
    420
    Par défaut
    Salut,

    il y a bien la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(DISTINCT DSI_DISK2_VOLSER) FROM "EXPLT"."TF_DSI_DISK2" where DSI_DISK2_DTEXTRACT='2016-06-05' and DSI_DISK2_SUBTYPE='R1'
    mais j'ai cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error: ERROR:  Unable to select an aggregate function from multiple potential matches - SUM(VARCHAR)
    ce qui me paraît normal car c'est DSI_DISK2_TAILLE_LOGIQUE que je veux additionner la colonne DSI_DISK2_VOLSER n'est pas additionnable car c'est du VARCHAR comme le dit le message d'erreur....

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 911
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 911
    Points : 420
    Points
    420
    Par défaut
    je vais essaye de donner un exemple simple, j'ai le tableau suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pommes	50
    poires	100
    bananes	75
    pommes	50
    poires	100
    bananes	75
    comme les pommes poire et bananes sont en double, j'aimerais exclure les doublons et obtenir la somme de 50 + 100+ 75

    soient : 225

  6. #6
    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
    Citation Envoyé par sam01 Voir le message
    ce qui me paraît normal car c'est DSI_DISK2_TAILLE_LOGIQUE que je veux additionner la colonne DSI_DISK2_VOLSER n'est pas additionnable car c'est du VARCHAR comme le dit le message d'erreur....
    Passez par une table dérivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select sum(DSI_DISK2_TAILLE_LOGIQUE)
      from (select distinct
                   DSI_DISK2_VOLSER
                 , DSI_DISK2_TAILLE_LOGIQUE
              from "EXPLT"."TF_DSI_DISK2"
             where DSI_DISK2_DTEXTRACT = '2016-06-05'
               and DSI_DISK2_SUBTYPE   = 'R1') t;

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 911
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 911
    Points : 420
    Points
    420
    Par défaut
    salut, le requête de la table dérivée me donne toutes les lignes et en plus cumule les sommes, de plus au lieu d'avoir une seule ligne (espace total) j'ai toutes les lignes mois les doublons.
    En gros, si je prends mon exemple avec les pommes, poires et bananes, j'obtiens ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pommes	100
    poires	200
    bananes	150
    or moi, je veux juste :


    225 soit : 100 + 50 + 75 car pommes, poires et bananes sont en doublons...

  8. #8
    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
    Citation Envoyé par sam01 Voir le message
    salut, le requête de la table dérivée me donne toutes les lignes et en plus cumule les sommes
    Vous n'avez donc pas même pas essayé de copier / coller la requête, c'est triste (pour vous).

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 911
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 911
    Points : 420
    Points
    420
    Par défaut
    OUPS, désolé, j'ai dû faire une erreur de frappe..
    Je suis vraiment confus.

    Ca fonctionne en fait..

    Merci beaucoup .

    Encore désolé...

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

Discussions similaires

  1. Pb index multi-valeurs avec DBase
    Par Rickless dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/01/2006, 16h50
  2. Réponses: 8
    Dernier message: 09/03/2005, 10h47
  3. [TP] Afficher une valeur avec outtext
    Par Bouilla dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/03/2005, 09h57
  4. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 16h38
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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