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

Requêtes et SQL. Discussion :

TOP , ORDER BY et COUNT


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut TOP , ORDER BY et COUNT
    Bonsoir

    Je dispose deux table (anciens et lycees).

    Je souhaite compter le nombre d'anciens par lycée en affichant seulement le "top 20 " des 20 comptages d'anciens par lycée les plus importants.

    Voici la requête que j’exécute ;

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TOP 20 LYCEES.lib_etb AS lycee, Count(*) AS nombre_etudiants_par_lycee
    FROM ANCIENS, LYCEES
    WHERE LYCEES.cod_etb=ANCIENS.cod_etb
    GROUP BY LYCEES.lib_etb, LYCEES.cod_etb
    HAVING Count(ANCIENS.cod_etb)
    ORDER BY Count(ANCIENS.cod_etb)DESC;

    Le "count" n'est pas pris en compte et la requête me renvoi les 20 premiers lycées mais par ordre alphabétique et non classé par ordre de comptage comme voulu .

    Comment remédier à la chose ?

    Merci

  2. #2
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut Top
    tanaka59 bonjour,

    As tu essayé de mettre le count en premier critère ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TOP 20 Count(*) AS nombre_etudiants_par_lycee,LYCEES.lib_etb AS lycee
    FROM ANCIENS, LYCEES
    WHERE LYCEES.cod_etb=ANCIENS.cod_etb
    GROUP BY LYCEES.lib_etb, LYCEES.cod_etb
    HAVING Count(ANCIENS.cod_etb)
    ORDER BY Count(ANCIENS.cod_etb)DESC;
    Bonne journée

    JimboLion

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    1) C'est quoi ce "having" ? oO
    2) Intérêt de grouper par libellé et code si on affiche seulement le libellé ?
    Exemple :
    Libellé Lycée | Nombre
    Lycée Maurice Lapin | 22
    Lycée Maurice Lapin | 54
    Ce genre de résultat est assez troublant, donc affichez aussi le code, ou faites en sorte que le libelle soit unique, et dans ce cas pas besoin de grouper par code.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 199
    Billets dans le blog
    47
    Par défaut
    bonsoir,

    avec les assistants ça se fait très bien sans connaissance du SQL et on obtient rapidement quelque chose comme:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TOP 20 LYCEES.cod_etb, LYCEES.lib_etb AS lycee, Count(*) AS nombre_etudiants_par_lycee
    FROM ANCIENS INNER JOIN LYCEES
    ON LYCEES.cod_etb=ANCIENS.cod_etb
    GROUP BY LYCEES.lib_etb, LYCEES.cod_etb
    ORDER BY Count(*) DESC;

    privé des assistants Requête ?

    Et puis je ne serai pas surpris d'apprendre qu'il y a plusieurs lycée Maurice Papin en France.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Hello

    Alors pour être honnête je ne sais pas me servir de l’assistant réquête ,

    Après analyse de vos code voici ma solution :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TOP 20 Count(*) AS nombre_etudiants_par_lycee, LYCEES.lib_etb AS lycee
    FROM ANCIENS, LYCEES
    WHERE (((LYCEES.cod_etb)=[ANCIENS].[cod_etb]))
    GROUP BY LYCEES.lib_etb
    ORDER BY 1 DESC;

    Pour le "Having" on m'a toujours appris que lorsque l'on fait un comptage , une somme ou un AVG on doit toujours mettre les clauses group by et having , sinon la requete n'est pas considérer comme bonne .

    info ou intox ?

    Merci des tuyaux

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 199
    Billets dans le blog
    47
    Par défaut
    bonjour,

    Alors pour être honnête je ne sais pas me servir de l’assistant réquête ,
    c'est dommage de ne pas avoir commencé par là quand on dispose d'Access, c'est formateur pour apprendre le SQL.

    une somme ou un AVG on doit toujours mettre les clauses group by et having
    having est facultatif, on l'utilise pour filtrer une expression agrégée. Voir ici.

Discussions similaires

  1. ORDER BY et COUNT
    Par Zartan dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/10/2007, 22h17
  2. ORDER BY RAND() sur un COUNT
    Par didier17062006 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/02/2007, 10h14
  3. Problème ORDER BY COUNT()
    Par Gwipi dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/04/2006, 16h01
  4. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28
  5. faire un ORDER BY sur COUNT(*)
    Par adilou1981 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/05/2005, 11h46

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