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 :

Incohérence dans le calcul d'une somme


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut Incohérence dans le calcul d'une somme
    Bonjour,
    Je n'ai plus vraiment de souci car j'ai trouvé une solution mais je ne comprends pas bien l'origine exacte du problème.
    En 11g : Tout va bien, pas de souci.
    Problème, ma prod est en 10g et là souci.

    J'ai une table de 184000 enregistrements à peu près.
    Dans cette table, je travaille uniquement sur 3 champs
    Annee : number not null (11 années différentes)
    Entite : number not null (17000 entites)
    montant : number not null

    index sur annee,entite

    j'effectue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Create table fm_vers as 
    select  annee,entite, 
    sum(montant) 
    from  vers_mnt
    group by  entite,annee ;
    Lorsque je regarde le résultat, ma somme est incorrecte pour certaines entités et années. 6 cas sur des milliers de lignes.
    Pour obtenir un peu moins d'erreurs, il me suffit d'inverser l'ordre du group by. Je me retrouve avec encore 4 erreurs.
    Au final, ma requête rendant les résultats complètement correct a besoin d'un order by sur entite à la fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Create table fm_vers as 
    select  annee,entite, 
    sum(montant) 
    from  vers_mnt
    group by  annee,entite
    order by entite;
    Je ne vois pas ce qui pose le problème en 10g, cela reste une somme assez simple.

    Si l'on part de la requête d'origine, où des erreurs existent, il suffit d'ajouter un where sur l'entité problèmatique pour ne pas voir d'erreurs. Je pourrai utiliser un curseur mais la requête reste basique donc je préfèrerai m'en passer.


    Si vous avez des explications, je suis preneur.
    Merci

  2. #2
    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
    Bonjour,

    Ca veut dire quoi que la somme n'est pas correcte?
    Au lieu d'avoir 120, Oracle vous donne 119?

    Ou alors, est-ce que par hasard, vous vous attendiez a voir ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select * from fm_vers;
    annee   entite   somme
    2000      a         120
    2001      a         354 
    2000      b         1231
    2005      c         12
    Et vous avez ca, mais avec les lignes "dans le desordre" ?

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    La somme est réellement fausse
    En 10g, pour 4 entités, j'ai une erreur sur la somme.
    Par exemple 9300 + 1122.15=9300.
    Alors qu'en 11g, le résultat est bien 10422.15

  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 !

    Quelle version exacte ?

    (J'avais entendu parler d'un bug sur le hash group by, patché ensuite...)

  5. #5
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    La version en prod est la 10.2.0.2.0.

    Merci

  6. #6
    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
    Du mal à trouver plus de détail, mais il y avait le bug 4604970 qui a été corrigé en 10.2.0.3 il paraît.

    Sinon, tu peux aussi désactiver le hash group by avec _gby_hash_aggregation_enabled = false

    Parles-en à ton DBA.

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

Discussions similaires

  1. Cognos calcul d'une somme dans un cube
    Par Payette dans le forum Cognos
    Réponses: 0
    Dernier message: 26/11/2013, 17h18
  2. Réponses: 8
    Dernier message: 03/07/2013, 17h46
  3. Calcul d'une somme dans une table
    Par bsangoku dans le forum Access
    Réponses: 12
    Dernier message: 24/01/2013, 22h05
  4. [MySQL] Calcul d'une somme dans une boucle VERSUS Calcul via la fonction MySQL SUM
    Par 2o1oo dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 13/10/2010, 09h32
  5. Calcul d'une somme dans Excel ??
    Par LaVaZza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/06/2006, 22h55

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