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 :

Classement des 100 premiers demandeurs


Sujet :

SQL Oracle

  1. #1
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut Classement des 100 premiers demandeurs
    bonjour,je dois ecrire une requete qui classe les demandeurs d'achat c'est a dire ceux ayant fait le plus grand nombre de demaande.Par exemple les 100 premiers
    voici ma requete qui ordonne (plus grande demande à la plus petite demande par demandeur).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count (REQUEST_USR_CREATE_ID)"nbre_dmde", REQUEST_USR_CREATE_ID
     from pur_request
     group by REQUEST_USR_CREATE_ID
     order by count (REQUEST_USR_CREATE_ID) desc
    comment selectionner les 100 premiers.j'ai voulu essayer 1 top 100 mais c'est pas bon car il me ramene les 100 premiers en ne tenant pas compte du nombre de demande.merci

  2. #2
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Requête de type top N implique requête utilisant les fonctions analytiques, une des fonctions analytiques row_count, rank ou dense rank selon vos spécs.

  3. #3
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    desolé mais je n'arrive pas à utilisé les fonctions analytiques dans ma requète.peux tu le faire avec ma requete.merci

  4. #4
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Si vous me filez votre paie oui sinon vous avez un tutoriel sur ce forum.

  5. #5
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    voici ce que j'ai fait et ça marche.il me fallait juste reflechir un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ROWNUM,f.* from(
    select count(REQUEST_USR_CREATE_ID ),REQUEST_USR_CREATE_ID 
    from pur_request, company_site 
    where REQUEST_COMPANY_ID =company_site.COMPANY_ID 
     group by REQUEST_USR_CREATE_ID  
     order by count(REQUEST_USR_CREATE_ID ) desc)f
     where rownum<100

  6. #6
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    C'est une solution reste à voir si c'est la bonne. Que voulez-vous faire quand plusieurs enregistrement se qualifient pour la même place ? Ex: disons si parmi les 100 premiers il y a 105 enregistrements ?

  7. #7
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    tu as totalement raison;
    je viens de rendre compte que j'ai 1 id_utilisateur qui occupe la 1ere , 2ème,3ème et 4 ème place avec ma requete.ce qui est juste mais par coherent si je veux faire le classement des 100 premiers utilisateurs.
    comment gerer ces cas.merci

  8. #8
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Requête de type top N implique requête utilisant les fonctions analytiques; une des fonctions analytiques row_count, rank ou dense rank selon vos spécs.

  9. #9
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    Il ne fallait encore juste reflechir.merci pr ta constance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select nbre_DA, REQUEST_USR  from
    (
    select  count( distinct REQUEST_ID ) nbre_DA,contact_name AS REQUEST_USR,request_date_record_id ,rank() over (order by count( distinct REQUEST_ID )  desc) AS cpte
     from pur_request, company_site, company_contact c 
    where REQUEST_COMPANY_ID =company_site.COMPANY_ID 
    and c.company_contact_id=REQUEST_USR_CREATE_ID 
    group by contact_name, request_date_record_id
    )T
    where rownum<=100
    et ça marche bien

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    C'était presque bien, mais vous vous accrochez mais vous vous accrochez à votre saloperie de bordel de merde de rownum spécifique à Oracle et qui est une plaie !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH 
    T AS 
    (SELECT Count(DISTINCT request_id)                             AS nbre_DA,
            contact_name                                           AS REQUEST_USR,
            Rank() OVER (ORDER BY Count(DISTINCT request_id) DESC) AS cpte          
     FROM   pur_request,
            JOIN company_site       ON request_company_id = company_site.company_id 
            JOIN company_contact c  ON c.company_contact_id = request_usr_create_id                    
     GROUP  BY contact_name, request_date_record_id
    )
    SELECT nbre_da,
           request_usr 
    FROM   T
    WHERE  cpte <= 100;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    ...
    saloperie de bordel de merde de rownum
    J'en doute que ce type d'intervention respecte la charte d'utilisation du forum.

    En général row_number(), rank et dense rank ne donnent pas le même résultat donc vous devez employer celle qui corresponde aux specs.

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

Discussions similaires

  1. Selection des x premiers caractères dans un champ précis
    Par Schulman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2005, 09h23
  2. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57
  3. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10

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