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 :

Modification / Optimisation requete


Sujet :

SQL Oracle

  1. #21
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,
    Essaie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT   mvt.id_affaire, mvt.id_mvt,reg.id_reg, avg (mt_mvt) mt_mvt,sum (mt_reg)mt_reg 
                  FROM mvt left OUTER JOIN reg
                       ON mvt.id_mvt = reg.id_mvt
                     AND mvt.id_affaire = reg.id_affaire
    where mvt.id_affaire = :pid          --     and mvt.id_mvt=:s
              GROUP BY ROLLUP (mvt.id_affaire,mvt.id_mvt,reg.id_reg)

  2. #22
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    Merci beaucoup pour l'astuce. Je regarde çà demain au boulot.

    Retour boulot... Bon ben le AVG ne marche pas car il me renvoie un avg entre 30 et 60 => 45 au lien de 90 :s

    Si vous avez d'autres pistes
    Emmanuel Lecoester
    => joomla addict.

  3. #23
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut ,

    Code amélioré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT   mvt.id_affaire id_aff, mvt.id_mvt id_mvt , mvt.mt_mvt, reg.mt_reg
        FROM (SELECT   mvt.id_affaire, mvt.id_mvt, SUM (mt_mvt) mt_mvt
                  FROM  mvt
              GROUP BY ROLLUP (mvt.id_affaire, mvt.id_mvt)) mvt,
             (SELECT   id_affaire, id_mvt, SUM (mt_reg) mt_reg
                  FROM reg
              GROUP BY id_affaire, id_mvt) reg
       WHERE mvt.id_mvt = reg.id_mvt(+)
         AND mvt.id_affaire = reg.id_affaire(+)
        -- AND mvt.id_affaire = :pid                        --     and mvt.id_mvt=:s
    ORDER BY mvt.id_affaire, mvt.id_mvt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ID_AFF	ID_MVT	MT_MVT	MT_REG
     
    10	1	10	200
    10	2	10	
    10	3	10	
    10		30	
    20	4	10	
    20	5	20	
    20		30	
    30	6	500	
    30		500	
    		560

  4. #24
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    Nickel çà marche.

    Sauf niveau perf

    Merci à tous pour votre aide.
    Emmanuel Lecoester
    => joomla addict.

  5. #25
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut ,
    J'ai trouvé un article qui par de la performance, ils disent que GROUP BY grouping sets plus performant que le group by rollup et group by cube

    Voici l'article integrale page 19 et 20
    http://www2.ift.ulaval.ca/~agamache/...Section1F2.pdf

  6. #26
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut Solution amélioré, sans le group by rollup
    Salut,

    J'ai trouvé un moyen plus simple et donne le meme le résultat ,pour éviter le group by rollup (qui diminuait la performance).
    1- Solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT   T.id_affaire,  T.id_mvt,  T.mt_mvt, sum(T.mt_reg) mt_reg
     FROM 
        (SELECT   mvt.id_affaire,  mvt.id_mvt,  sum(mt_reg) mt_reg, 
                      sum(mt_mvt)  mt_mvt   
           FROM mvt LEFT OUTER JOIN   reg ON mvt.id_mvt = reg.id_mvt                          
               AND mvt.id_affaire = reg.id_affaire  
           GROUP BY mvt.id_affaire,  mvt.id_mvt,  reg.id_reg) T
     GROUP BY  T.id_affaire,  T.id_mvt,  T.mt_mvt
    2-Solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT  
      mvt.id_affaire,
      mvt.id_mvt,sum(mt_mvt)  mt_mvt ,
      (SELECT SUM(mt_reg)
         FROM   REG
         WHERE   reg.id_affaire = mvt.id_affaire   			
             AND  reg.id_mvt 	= mvt.id_mvt) mt_reg  
     FROM mvt 
    GROUP BY mvt.id_affaire,  mvt.id_mvt

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Optimisation requete
    Par mic79 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/04/2005, 16h35
  2. optimisation requetes (besoin de votre avis)
    Par seb92 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/12/2004, 11h27
  3. [PL/SQL] Optimisation requete SQL
    Par CDRIK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2004, 09h52
  4. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  5. Optimisation requetes SQL
    Par joel90 dans le forum Administration
    Réponses: 18
    Dernier message: 15/05/2004, 21h45

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