Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2011, 14h57   #1
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 51
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 51
Points : 15
Points : 15
Par défaut Comment éliminer des lignes d'un group by Rollup ?

Bonjour à tous,

Bon je ne suis pas sur que mon titre soit très claire !

Si j'ai bien compris ce que j'ai pu lire sur le net, il est possible de détecter des requêtes "optimisables" avec des bind variables, en regroupant les SQL HASH VALUE et SQL_ID.

J'aimerai donc ne conserver que les lignes dont le couple SQL_HASH_VALUE et SQL_ID est différent pour une même valeur de SQL_HASH_VALUE. (pas sûr d'être très claire une fois de plus ) Cela me permettrait d'avoir le SQL_ID des requêtes à vérifier.

Voici ma requête :
Code :
1
2
3
4
5
6
7
8
SELECT DECODE(
          GROUPING(sql_id), 1, 'TOTAL', ' ') "TOTAL",
        sql_plan_hash_value, sql_id,  COUNT(sql_id)
FROM TABLE
WHERE sql_id IS NOT NULL AND sql_plan_hash_value IS NOT NULL AND ROWNUM <10000
GROUP BY ROLLUP(sql_plan_hash_value, sql_id)
HAVING sql_plan_hash_value <> 0 
ORDER BY 2, 3 ;
Merci d'avance pour vos suggestions
alex_972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 15h38   #2
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Pour le coup, ça se résume pas juste à "j'ai plusieurs lignes pour le même plan" ?

Du coup, having count(*) > 1 devrait suffire, non ?
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 16h02   #3
Futur Membre du Club
 
Inscription : septembre 2011
Messages : 51
Détails du profil
Informations forums :
Inscription : septembre 2011
Messages : 51
Points : 15
Points : 15
Salut pacmann,

Non, j'ai déjà essayé. Je ne sais pas ce qu'il compte mais il me renvoie toujours des lignes où je n'ai qu'une ligne avec un couple SQL_HASH/SQL_ID et une ligne pour le total.
(Avec la condition HAVING count(*) > 2)
alex_972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 16h32   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Quelque chose comme ça devrait fonctionner :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  SELECT "TOTAL"
       , sql_plan_hash_value
       , sql_id
       , nb_sql_id
    FROM
(
  SELECT DECODE(GROUPING(sql_id), 1, 'TOTAL', ' ') AS "TOTAL"
       , sql_plan_hash_value
       , sql_id
       , COUNT(sql_id) AS nb_sql_id
       , count(sql_id) over(partition BY sql_plan_hash_value) AS cdi
    FROM SYS.V_$SQL_PLAN_MONITOR
   WHERE sql_id IS NOT NULL
     AND sql_plan_hash_value IS NOT NULL
     AND ROWNUM < 10000
GROUP BY ROLLUP(sql_plan_hash_value, sql_id)
  HAVING sql_plan_hash_value <> 0
)
   WHERE cdi > 1
ORDER BY 2, 3;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h06.


 
 
 
 
Partenaires

Hébergement Web