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 :

Requête pour lister les datas en faisant un limit sur un champ


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Par défaut Requête pour lister les datas en faisant un limit sur un champ
    Bonjour,

    sur une base Mysql5

    J'ai deux Tables : groupe et données :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `groupes` (
      `id` int(11) DEFAULT NULL,
      `GR` varchar(250) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
     
     
     
    CREATE TABLE `donnees` (
      `id` int(11) DEFAULT NULL,
      `Nom` varchar(250) DEFAULT NULL,
      `IdGr` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1

    avec les données suivantes :

    table groupes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +------+--------+
    | id   | GR     |
    +------+--------+
    |    1 | un     |
    |    2 | deux   |
    |    3 | trois  |
    |    4 | quatre |
    |    5 | cinq   |
    +------+--------+
    table donnees
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    +------+-------+------+
    | id   | Nom   | IdGr |
    +------+-------+------+
    |    1 | aaaaa |    1 |
    |    2 | bbb   |    2 |
    |    3 | ccc   |    3 |
    |    4 | ddd   |    4 |
    |    5 | eee   |    5 |
    |    6 | ff    |    1 |
    |    7 | gg    |    2 |
    |    8 | hh    |    3 |
    |    9 | i     |    4 |
    |   10 | jj    |    5 |
    |   11 | kk    |    1 |
    |   12 | ll    |    2 |
    |   13 | m     |    3 |
    |   14 | nn    |    4 |
    |   15 | oo    |    5 |
    |   16 | p     |    1 |
    |   17 | q     |    2 |
    |   18 | rr    |    3 |
    |   19 | ss    |    4 |
    |   20 | tt    |    5 |
    |   21 | uu    |    1 |
    |   22 | v     |    2 |
    |   23 | w     |    3 |
    |   24 | x     |    4 |
    |   25 | y     |    5 |
    |   26 | z     |    1 |
    |   27 | A     |    2 |
    |   28 | B     |    3 |
    |   29 | C     |    4 |
    |   30 | D     |    5 |
    |   31 | z     |    1 |
    |   32 | D     |    2 |
    |   33 | E     |    3 |
    |   34 | F     |    4 |
    |   35 | G     |    1 |
    |   36 | H     |    2 |
    |   37 | I     |    1 |
    +------+-------+------+

    j'utilise la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select g.GR,d.idGr, d.Nom from donnees d left join groupes g on d.IdGr=g.id order by GR,Nom ASC;
    la requête me retourne ce 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    +--------+------+-------+
    | GR     | idGr | Nom   |
    +--------+------+-------+
    | cinq   |    5 | D     |
    | cinq   |    5 | eee   |
    | cinq   |    5 | jj    |
    | cinq   |    5 | oo    |
    | cinq   |    5 | tt    |
    | cinq   |    5 | y     |
    | deux   |    2 | A     |
    | deux   |    2 | bbb   |
    | deux   |    2 | D     |
    | deux   |    2 | gg    |
    | deux   |    2 | H     |
    | deux   |    2 | ll    |
    | deux   |    2 | q     |
    | deux   |    2 | v     |
    | quatre |    4 | C     |
    | quatre |    4 | ddd   |
    | quatre |    4 | F     |
    | quatre |    4 | i     |
    | quatre |    4 | nn    |
    | quatre |    4 | ss    |
    | quatre |    4 | x     |
    | trois  |    3 | B     |
    | trois  |    3 | ccc   |
    | trois  |    3 | E     |
    | trois  |    3 | hh    |
    | trois  |    3 | m     |
    | trois  |    3 | rr    |
    | trois  |    3 | w     |
    | un     |    1 | aaaaa |
    | un     |    1 | ff    |
    | un     |    1 | G     |
    | un     |    1 | I     |
    | un     |    1 | kk    |
    | un     |    1 | p     |
    | un     |    1 | uu    |
    | un     |    1 | z     |
    | un     |    1 | z     |
    +--------+------+-------+



    je voudrais lister la table donnees et ne lister que 2 lignes par groupe
    faire une sorte de LIMIT 2 mais dans chaque Groupe (donnees.idGr)

    et obtenir le résultat suivant

    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
     
    +--------+------+-------+
    | GR     | idGr | Nom   |
    +--------+------+-------+
    | cinq   |    5 | D     |
    | cinq   |    5 | eee   |
    | deux   |    2 | A     |
    | deux   |    2 | bbb   |
    | quatre |    4 | C     |
    | quatre |    4 | ddd   |
    | trois  |    3 | B     |
    | trois  |    3 | ccc   |
    | un     |    1 | aaaaa |
    | un     |    1 | ff    |
    +--------+------+-------+

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Je ne sais pas comment c'est défini dans la norme SQL. Par contre, je sais qu'en Oracle on utiliserait DENSE_RANK() OVER...

    Cordialement,

    Arkhena

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par DelphiCool Voir le message
    sur une base Mysql5
    Pour la norme SQL, les fonctions de fenêtrage en font partie, donc dense_rank ou row_number.

    Pour MySQL, il faut contourner.
    L'idée c'est de rajouter une jointure supplémentaire qui va effectuer un comptage, ça doit donner quelque chose de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        SELECT gr.GR, d1.idGr, d1.Nom
          FROM groupes as gr
    INNER JOIN donnees as d1
            ON d1.IdGr = gr.id
    INNER JOIN donnees as d2
            ON d2.IdGr = d1.IdGr
           AND d2.Nom <= d1.Nom
      GROUP BY gr.GR, d1.idGr, d1.Nom
        HAVING COUNT(*) <= 2
      ORDER BY gr.GR  ASC
             , d1.Nom ASC;

  4. #4
    Membre éprouvé
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Par défaut
    Merci Waldar

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/01/2012, 12h43
  2. [WD15] Requête pour lister les commandes d'une gestion commerciale
    Par tux59 dans le forum WinDev
    Réponses: 22
    Dernier message: 19/07/2010, 08h37
  3. Réponses: 1
    Dernier message: 21/07/2006, 05h56
  4. Req pour lister les vues d'une base ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/07/2006, 08h12
  5. requête pour exclure les doublons.
    Par sam01 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2005, 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