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 MySQL Discussion :

Top 20 sur Group By


Sujet :

Requêtes MySQL

  1. #21
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour Artemus,

    Concernant l'inégalité stricte, c'était en effet une erreur de ma part, merci pour la correction.
    Sans cela, le dernier élément saute lors de la jointure, ce qui n'est pas vraiment gênant s'il est au délà du quota, mais gênant le reste du temps.

    Dracouille devrait donc en prendre note s'il utilise la dernière requete que j'ai proposée.


    La séquence produite ne tient plus compte des égalités : 1 - 2 - 3 - 4 - 5.
    C'est justement la séquence voulue dans ce cas, afin d'avoir toujours 20 lignes en cas d'égalité, ni plus ni moins.
    En soit elle est correcte, c'est juste que c'est un rang qui tient compte en deuxième lieu (en cas d’exæquo) de la valeur idTable2.


    Je me demande si avec MySql, on peut hors "user_defined_variables", produire un résultat conforme à ce que l'on attend !
    Oui c'est possible d'obtenir le rang que tu souhaite. (visiblement 1-2-2-4-5)
    Il suffit pour cela d'adapter le count pour ne pas prendre en compte les égalités :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select tb1.mois, tb1.idTable2, tb1.nbre, 1+ count(CASE WHEN tb2.nbre  > tb1.nbre THEN 1 ELSE NULL END) as rang
    from      sample as tb1
    inner join sample as tb2
    	on  tb2.mois     = tb1.mois
    	and tb2.nbre  	>= tb1.nbre
    group by tb1.mois, tb1.idTable2, tb1.nbre
    order by tb1.mois, count(*)
    ;

  2. #22
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut aieeeuuuuu

    J'ai légèrement modifié ton case ... end.
    Dans l'état, il commence le count à partir du zéro. Donc j'ai ajouté '+ 1' pour être en conformité avec mon exemple.
    Maintenant, ça fonctionne parfaitement !

    Voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    --------------
    select tb1.mois, tb1.idTable2, tb1.nbre, count(CASE WHEN tb2.nbre > tb1.nbre THEN 1 ELSE NULL END) + 1 as rang
    from       sample as tb1
    inner join sample as tb2
    on  tb2.mois   = tb1.mois
    and tb2.nbre  >= tb1.nbre
    group by tb1.mois, tb1.idTable2, tb1.nbre
    order by tb1.mois, rang
    --------------
     
    +------+----------+------+------+
    | mois | idTable2 | nbre | rang |
    +------+----------+------+------+
    |    1 |        5 |   35 |    1 |
    |    1 |        2 |   20 |    2 |
    |    1 |        4 |   20 |    2 |
    |    2 |        2 |   50 |    1 |
    |    2 |       99 |   15 |    2 |
    |    2 |        5 |    8 |    3 |
    +------+----------+------+------+
    J'ai aussi appris plein de chose sur cette technique que je ne connaissais pas.
    Merci de ta participation aieeeuuuuu.

    Et en plus, nous avons la séquence suivante : 1 - 2 - 2 - 4 - 5.

    Dracouille, tu peux mettre ton sujet à résolu.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #23
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    j'avais bien mis le +1 également, mais avant le COUNT :


  4. #24
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut aieeeuuuuu.

    Désolé, je n'avais pas ce +1 avant le count.

    Encore merci pour cette solution qui fonctionne parfaitement.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. TOP N sur un GROUP BY
    Par GodGives dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/07/2010, 17h23
  2. [Access 2000] Evénement click sur groupe d'option
    Par Mariboo dans le forum Access
    Réponses: 1
    Dernier message: 22/09/2006, 14h52
  3. [C.R .8.5] doublons de référence sur groupes différents
    Par leuke dans le forum SAP Crystal Reports
    Réponses: 24
    Dernier message: 14/11/2005, 11h15
  4. Top 10 sur plusieurs items
    Par hussard dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/10/2005, 09h33
  5. ordre correct sur group ?
    Par Force59 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2004, 09h27

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