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 03/10/2011, 12h58   #1
Invité de passage
 
Inscription : avril 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 16
Points : 1
Points : 1
Par défaut Récupérer les dix valeurs les plus élevées d'une liste

Bonjour,

Voici ma requete de base qui me renvoie pour chaque 'Symptom Category' la nombre de fois que ce même champ a été renseignée.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT cat.sym "Symptom category",
        count(0) "Count"
      FROM    call_req cas,
        prob_ctg cat,
        ctct grpass
    WHERE  cas.type  = 'I'
    AND    cas.z_case_type = 441101
    AND    cat.persid      = cas.category
    AND    cas.open_date >= fct_get_numdate(add_months(sysdate, -6))
    AND  (grpass.c_last_name LIKE '%eur%' OR grpass.c_last_name LIKE'%fto%')
    AND grpass.id = cas.group_id
    GROUP BY cat.sym ;
A partir de ce résultat, je ne voudrais que les 10 valeurs de la colonne Count qui sont les plus élévées.

J'ai essayé la requete suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT top 10 * FROM 
 
( SELECT cat.sym "Symptom category",
       count(0) "Count"
FROM   call_req cas,
       prob_ctg cat,
       ctct grpass
WHERE  cas.type  = 'I'
AND    cas.z_case_type = 441101
AND    cat.persid      = cas.category
AND    cas.open_date >= fct_get_numdate(add_months(sysdate, -6))
AND  (grpass.c_last_name LIKE '%eur%' OR grpass.c_last_name LIKE'%fto%')
AND grpass.id = cas.group_id
GROUP BY cat.sym
) 
 
ORDER BY Count;
Malheureusement cela ne marche pas. J'ai un message d'erreur qui me dit qu'il ne trouve plus le premier 'from'. Peut etre ai-je utilisé des mots clé comme 'top' et qui ne sont pas du tout reconnaissables par Oracle.

Merci d'avance pour votre aide.
corro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 13h19   #2
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
tu doit utiliser rownum
Code :
1
2
3
SELECT *
FROM ta_requete
WHERE rownum<=10
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 03/10/2011, 13h27   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 13h28   #4
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select * from
( SELECT cat.sym "Symptom category",
       count(0) "Count"
FROM   call_req cas,
       prob_ctg cat,
       ctct grpass
WHERE  cas.type  = 'I'
AND    cas.z_case_type = 441101
AND    cat.persid      = cas.category
AND    cas.open_date >= fct_get_numdate(add_months(sysdate, -6))
AND  (grpass.c_last_name LIKE '%eur%' OR grpass.c_last_name LIKE'%fto%')
AND grpass.id = cas.group_id
GROUP BY cat.sym
order by 2 desc
) 
where rownum <= 10
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/10/2011, 14h39   #5
Invité de passage
 
Inscription : avril 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 16
Points : 1
Points : 1
Trés bien.
Merci pour vos réponses.
corro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 15h13   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par corro Voir le message
Trés bien.
Merci pour vos réponses.
Si 15 catégories ont le même count(*) faut-il les retenir 10 ou 15 ?

PS Count(0) c'est "mauvaise pratique".
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h10   #7
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Citation:
Envoyé par mnitu Voir le message
PS Count(0) c'est "mauvaise pratique".
Pas tout à fait d'accord avec ce point, j'aurais dit que c'est une habitude basée sur l'idée fausse que count(0) est plus rapide que count(*), cependant quelle que soit la syntaxe utilisée, c'est le même plan d'exécution qui est génénéré et le même impact au niveau de la base de donnée.

http://asktom.oracle.com/pls/asktom/...:1156159920245



L'autre question reste ouverte, à savoir

Citation:
Envoyé par mnitu Voir le message
Si 15 catégories ont le même count(*) faut-il les retenir 10 ou 15 ?
S'il faut garder les 15 alors il faut utiliser une fonction analytique de ranking
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 03/10/2011, 17h08   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par ojo77 Voir le message
Pas tout à fait d'accord avec ce point, j'aurais dit que c'est une habitude basée sur l'idée fausse que count(0) est plus rapide que count(*), cependant quelle que soit la syntaxe utilisée, c'est le même plan d'exécution qui est génénéré et le même impact au niveau de la base de donnée.
...
Vous vous permettez d'interpréter mes propos d'une manière au moins aventureuse! Si vous aimez Tom Kyte voilà ce qu'il dit ici
Citation:
count(1) is pointless.
count(*) is the right way

count(1) is internally optimized to count(*)

Donc si count(1) manque du sens pensez vous que count(0) c'est autre chose que "mauvaise pratique" ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 17h10   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par ojo77 Voir le message
...S'il faut garder les 15 alors il faut utiliser une fonction analytique de ranking
Oui c'est ça. Le problème est qu’il faut d’abord (se) poser la question.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 18h27   #10
Rédacteur
 
Inscription : décembre 2002
Messages : 2 387
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 387
Points : 3 272
Points : 3 272
Citation:
Envoyé par mnitu Voir le message
Donc si count(1) manque du sens pensez vous que count(0) c'est autre chose que "mauvaise pratique" ?
Pour moi, une mauvaise pratique est une façon de faire qui est nuisible, qui a des effets négatifs.
Ce n'est pas le cas du COUNT(0). On peut le qualifier d'inutile, de sans intérêt, mais pas de mauvaise pratique au sens strict.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 10h15   #11
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 813
Points : 5 813
Citation:
Envoyé par Pomalaix Voir le message
Pour moi, une mauvaise pratique est une façon de faire qui est nuisible, qui a des effets négatifs.
Ce n'est pas le cas du COUNT(0). On peut le qualifier d'inutile, de sans intérêt, mais pas de mauvaise pratique au sens strict.
Ecrire du code caractérisé comme « non-sens » est intellectuellement nuisible.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/10/2011, 10h21   #12
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 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Et pour les douze clients qui sont encore en 7.x c'est aussi mauvais pour les perfs
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h15.


 
 
 
 
Partenaires

Hébergement Web