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 :

Supprimer des doublons d'un résultat


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut Supprimer des doublons d'un résultat
    Bonjour a tous,

    Je galère un peu, j'ai besoin de supprimer des doublons d'un résultat d'une requête.

    J'ai un table de MEMBRES est dans celle-ci j'ai 4 types d'abonnements.

    Le 1er Étudiant/Retraité
    Le 2e Membre agrée
    Le 3e Corporatif Régulier (5 Membres)
    Le 4e Corporatif Illimité

    Si je désires compté mes nombres d'abonnements distinct, supposons que mon premier abonnement Corporatif Régulier a 3 membres sur 5 dans mon résultat je désire que ça compte pour 1 seulement.

    J'aurais 3 Membres avec un ID_Membre en INDEX mais le No_Membre est le même pour les trois étant donné que ils font parties du même abonnement.

    Pour que ca soit plus facile a compter, lorsque je fais mon inscription des membres, j'ai mis une colonne TYPE qui dit quel abonnement la personne a pris.
    Soit ER pour Étudiant/Retraité, MA pour Membre Agrée, C5 pour Corporatif Régulier, CI pour Corporatif Illimité.

    Ma requête initiale pour compter chacun d'eux est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TYPE, COUNT(TYPE) AS nbre FROM membres GROUP BY TYPE ORDER BY TYPE
    Je ne sais pas quoi utilisé exactement pour trier le tout, j'ai lu que DISTINCT peux faire l'affaire mais encore la je ne suis pas certain de ma syntaxe.

    Merci pour vos réponses.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Si je désires compté mes nombres d'abonnements distinct, supposons que mon premier abonnement Corporatif Régulier a 3 membres sur 5 dans mon résultat je désire que ça compte pour 1 seulement.
    Je n'ai pas compris la logique.

    Tu devrais nous donner un extrait de tes données et le résultat attendu.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Comme Sébastien, je n'ai rien compris de ce que vous désirez faire.

    Un jeu d'essai serait le bienvenue. Vous indiquez le résultat attendu.

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

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Nom : Capture-3.PNG
Affichages : 107
Taille : 29,6 Ko

    Comme vous pouvez le voir, l'enregistrement 3,10,11 ont le meme numéro de membre, je désire que ce dernier ne soit compté que comme un et non comme trois.

    Tout le reste doit etre compté normalement. Ca ne sera pas toujours C5 qui sera en doublon, ca peut etre n'importe quel enregistrement

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Tu veux compter les numéros de membres distincts :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ALL COUNT(DISTINCT No_Membre)
    FROM Membres

    Donnera 9 avec le jeu de données que tu as posté.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id_membre`    integer  unsigned NOT NULL auto_increment primary key,
      `no_membre`    char(10)          NOT NULL,
      `type`         char(02)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`no_membre`,`type`) values
      ('MA-000001','MA'),
      ('MA-000002','MA'),
      ('C5-000001','C5'),
      ('ER-000001','ER'),
      ('ER-000002','ER'),
      ('ER-000003','ER'),
      ('CI-000001','CI'),
      ('MA-000003','MA'),
      ('MA-000004','MA'),
      ('C5-000001','C5'),
      ('C5-000001','C5')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +-----------+-----------+------+
    | id_membre | no_membre | type |
    +-----------+-----------+------+
    |         1 | MA-000001 | MA   |
    |         2 | MA-000002 | MA   |
    |         3 | C5-000001 | C5   |
    |         4 | ER-000001 | ER   |
    |         5 | ER-000002 | ER   |
    |         6 | ER-000003 | ER   |
    |         7 | CI-000001 | CI   |
    |         8 | MA-000003 | MA   |
    |         9 | MA-000004 | MA   |
    |        10 | C5-000001 | C5   |
    |        11 | C5-000001 | C5   |
    +-----------+-----------+------+
    --------------
    select   `no_membre`,
              any_value(`type`)    as `type`,
              any_value(id_membre) as `id_membre`
        from `test`
    group by `no_membre`
    --------------
     
    +-----------+------+-----------+
    | no_membre | type | id_membre |
    +-----------+------+-----------+
    | MA-000001 | MA   |         1 |
    | MA-000002 | MA   |         2 |
    | C5-000001 | C5   |         3 |
    | ER-000001 | ER   |         4 |
    | ER-000002 | ER   |         5 |
    | ER-000003 | ER   |         6 |
    | CI-000001 | CI   |         7 |
    | MA-000003 | MA   |         8 |
    | MA-000004 | MA   |         9 |
    +-----------+------+-----------+
    --------------
    select   count(distinct `no_membre`) as Nbre
        from `test`
    --------------
     
    +------+
    | Nbre |
    +------+
    |    9 |
    +------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu veux compter les numéros de membres distincts :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ALL COUNT(DISTINCT No_Membre)
    FROM Membres

    Donnera 9 avec le jeu de données que tu as posté.
    Ce que je désire compter c'est le nombre de TYPE, mais le C5 ne doit compter que pour un seul étant donné que c'est un abonnement CORPORATIF Regulier qui a déja 3 membres sur 5 de pris.

    Donc le résultat de ma requete devrait me donner 4 x MA, 3 x ER, 1 x CI et 1 x C5

  8. #8
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Code mysql : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id_membre`    integer  unsigned NOT NULL auto_increment primary key,
      `no_membre`    char(10)          NOT NULL,
      `type`         char(02)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`no_membre`,`type`) values
      ('MA-000001','MA'),
      ('MA-000002','MA'),
      ('C5-000001','C5'),
      ('ER-000001','ER'),
      ('ER-000002','ER'),
      ('ER-000003','ER'),
      ('CI-000001','CI'),
      ('MA-000003','MA'),
      ('MA-000004','MA'),
      ('C5-000001','C5'),
      ('C5-000001','C5')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +-----------+-----------+------+
    | id_membre | no_membre | type |
    +-----------+-----------+------+
    |         1 | MA-000001 | MA   |
    |         2 | MA-000002 | MA   |
    |         3 | C5-000001 | C5   |
    |         4 | ER-000001 | ER   |
    |         5 | ER-000002 | ER   |
    |         6 | ER-000003 | ER   |
    |         7 | CI-000001 | CI   |
    |         8 | MA-000003 | MA   |
    |         9 | MA-000004 | MA   |
    |        10 | C5-000001 | C5   |
    |        11 | C5-000001 | C5   |
    +-----------+-----------+------+
    --------------
    select   `type`,
             count(distinct `no_membre`) as Nbre
        from `test`
    group by `type`
    --------------
     
    +------+------+
    | type | Nbre |
    +------+------+
    | C5   |    1 |
    | CI   |    1 |
    | ER   |    3 |
    | MA   |    4 |
    +------+------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...

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

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ConceptInterWEB Voir le message
    Ce que je désire compter c'est le nombre de TYPE, mais le C5 ne doit compter que pour un seul étant donné que c'est un abonnement CORPORATIF Regulier qui a déja 3 membres sur 5 de pris.
    Donc le résultat de ma requete devrait me donner 4 x MA, 3 x ER, 1 x CI et 1 x C5
    Tu veux donc le nombre de ID membre distincts par type.

    => Je rejoins la réponse de Artemus24 (+1)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.

    Code mysql : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id_membre`    integer  unsigned NOT NULL auto_increment primary key,
      `no_membre`    char(10)          NOT NULL,
      `type`         char(02)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`no_membre`,`type`) values
      ('MA-000001','MA'),
      ('MA-000002','MA'),
      ('C5-000001','C5'),
      ('ER-000001','ER'),
      ('ER-000002','ER'),
      ('ER-000003','ER'),
      ('CI-000001','CI'),
      ('MA-000003','MA'),
      ('MA-000004','MA'),
      ('C5-000001','C5'),
      ('C5-000001','C5')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +-----------+-----------+------+
    | id_membre | no_membre | type |
    +-----------+-----------+------+
    |         1 | MA-000001 | MA   |
    |         2 | MA-000002 | MA   |
    |         3 | C5-000001 | C5   |
    |         4 | ER-000001 | ER   |
    |         5 | ER-000002 | ER   |
    |         6 | ER-000003 | ER   |
    |         7 | CI-000001 | CI   |
    |         8 | MA-000003 | MA   |
    |         9 | MA-000004 | MA   |
    |        10 | C5-000001 | C5   |
    |        11 | C5-000001 | C5   |
    +-----------+-----------+------+
    --------------
    select   `type`,
             count(distinct `no_membre`) as Nbre
        from `test`
    group by `type`
    --------------
     
    +------+------+
    | type | Nbre |
    +------+------+
    | C5   |    1 |
    | CI   |    1 |
    | ER   |    3 |
    | MA   |    4 |
    +------+------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...

    Cordialement.
    Artemus24.
    @+
    Merci beaucoup c'est très apprécié.

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

Discussions similaires

  1. [RegEx] Expression régulière pour supprimer des doublons
    Par cbroissa dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2017, 01h59
  2. [MySQL] Supprimer des doublons existants
    Par Little_flower dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/02/2008, 09h23
  3. Supprimer des doublons
    Par gta1234 dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/08/2007, 20h05
  4. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15
  5. Réponses: 2
    Dernier message: 07/07/2004, 17h44

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