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

SQL Oracle Discussion :

[11g] Sum et Null


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Billets dans le blog
    1
    Par défaut [11g] Sum et Null
    Bonjour,

    La fonction sum() ne prend pas en compte les null s'il y a au moins une valeur renseignée prise en compte.
    Je dois faire le contraire, s'il y a au moins une valeur null dans le périmètre je dois renvoyer null, y a t-il un moyen simple de faire ça ? un paramètre de la fonction ? ou faut-il compter le nombre de null ?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with test as
      ( select 252 n from dual union all
        select 43 n from dual union all
        select null n from dual ) 
    select
      sum(n)
    from test
    ;
    -- resultat=295
    -- comment avoir null simplement ?

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Il n'y pas de paramètre magique. Soit comparer count(*) avec count(n) soit tester si existe valeur null.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Oui en effet à la va-vite c'est une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select case count(*)
             when count(n)
             then sum(n)
           end as res
      from test;
    Edit : grilled by mnitu !

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

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

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

    Pour rigoler, mais ça va pas te plaire je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        WITH test AS
        ( SELECT 252 n FROM dual union ALL
        SELECT 43 n FROM dual union ALL
        SELECT null n FROM dual ) 
        SELECT greatest(1, sign(min(n) keep(dense_rank first order by n nulls first))) * sum(n)
        FROM test

  5. #5
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 878
    Billets dans le blog
    3
    Par défaut
    Waouh, au lieu de 5 minutes de code, tu as droit à 10 minutes de code et 15 minutes de commentaires + 45 minutes de justification au CP que c'est la bonne solution ^^
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(n) FROM tmp WHERE 1 NOT IN (SELECT 1 FROM tmp WHERE n IS NULL AND ROWNUM=1);
    Comme ca on peut eventuellemt utiliser un index pour savoir tres vite si il va falloir renvoyer null ou pas.

  7. #7
    Membre Expert
    Avatar de doc malkovich
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2008
    Messages
    1 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 884
    Billets dans le blog
    1
    Par défaut
    bon bin merci pour vos réponses

    s'il fallait voter je prendrais celle de waldar, qui est la plus simple à expliquer je trouve, désolé pacmann mais j'ai mal à la tête juste à essayer de décortiquer ta formule

    Pour ma part j'étais parti sur l'utilisation minimale de caractères, j'étais arrivé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       WITH test AS
        ( SELECT 252 n FROM dual union ALL
        SELECT 43 n FROM dual union ALL
        SELECT null n FROM dual ) 
        SELECT nullif(min(nvl2(n,1,0)),0)*sum(n)
        FROM test
    Mais comme dirait Glutinus c'est pas évident à expliquer à un CP ou dans la doc ...
    a+

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Rams7s Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(n) FROM tmp WHERE 1 NOT IN (SELECT 1 FROM tmp WHERE n IS NULL AND ROWNUM=1);
    Comme ca on peut eventuellemt utiliser un index pour savoir tres vite si il va falloir renvoyer null ou pas.
    Pourriez-vous essayer de nous démontrer tout ça via un exemple, SVP.

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

Discussions similaires

  1. Sum(Null()) n est pas null
    Par CLEM_BUGTRACK dans le forum QlikView
    Réponses: 2
    Dernier message: 07/05/2015, 16h00
  2. Réponses: 9
    Dernier message: 14/01/2009, 16h01
  3. Variations sur NULL, ou SUM(X+Y) <> SUM(X) + SUM(Y) ?
    Par fsmrel dans le forum Langage SQL
    Réponses: 25
    Dernier message: 13/03/2008, 10h48
  4. [Mysql] SUM(planetes.u11) + SUM(attaques.u11) == NULL ?
    Par dark_vidor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/03/2006, 21h51
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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