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 :

GROUP BY et case WHEN


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut GROUP BY et case WHEN
    Bonjour
    UN client m'a communiqué des fichiers excels de participants à des colloques avec nom, prenom email,
    j'ai créer une table compilation où j'ai importé tous ces CSV , en renseignant les années ce qui me donne une structure de type
    id - prenom - nom - email - 2004 - 2005 - 2006 ( 2007 - 2008
    là j'aurais besoin de faire une extraction des infos de chaque personne en disant (cette personnes a participé à 2004, 2005, 2008 etc ..)
    en gros en résultat pierre dupont - 2004 - 2005 2008
    j'ai donc besoin de faire un group BY pour grouper par nom et prenom les infos sauf que 'n faisant un group BY, ça me garde les infos ocenrnant nom et prenoms, mais ça ne me garde que le nom , le prenom et le dernier résultats trouvé sur l'année

    j'ai donc trouvé une solution en faisant une requete du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * ,
    CASE WHEN `2004`   = 'oui' THEN 'oui' ELSE 'non' END AS annee2004,
    CASE WHEN `2005` = 'oui' THEN 'oui' ELSE 'non' END AS annee2005,
    CASE WHEN `2006`  = 'oui' THEN 'oui' ELSE 'non' END AS annee2006,
    CASE WHEN `2007`  = 'oui' THEN 'oui' ELSE 'non' END AS annee2007,
    CASE WHEN `2008`  = 'oui' THEN 'oui' ELSE 'non' END AS annee2008,
    COUNT(id)
    FROM matable WHERE 1
    GROUP BY email
    mais ça continue de ne me garder que la première colonne année, le case n'a pas l'air d'être pris en compte ...

    exemple : si pierre dupont a participé au colloque en 2004, 2005 et 2007, il ne me garde que 2004
    sauriez vous d'où vient le problème ...,

    j'ai mis mes champs concernant les années 2004 par exemple en set ('oui','non'), est que ça peut poser un problème ;..
    Merci d'avance
    PS : j'ai cherché , mais là je bloque totalement ...

    Merci d'avance pour vos lumières

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Le problème vient probablement du GROUP BY.
    Mais je ne comprends pas du tout la logique de la table.
    Si toutes les années sont représentées dans chaque ligne, à quoi cela sert-il de faire un GROUP BY ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    Plusieurs remarques, comme ça :
    1/ Il y a un problème de modélisation... Comment faire pour ajouter un colloque en 2009 avec un tel modèle. Normalement, il faut une table colloque (avec l'année), une table personne avec le nom, le prénom et le mail, et une table participants qui fait le lien entre colloque et personne, donnant ainsi les participants de chaque colloque.
    2/ Quelles sont les valeurs possibles dans les champs '2004', '2005', ... ? Si il y a déjà des 'oui', pourquoi remettre 'oui' en passant par un case ?
    3/ Je ne comprends pas le WHERE 1 ? Ca ne signifie rien... et je me demande si ça n'explique pas une partie du problème...
    4/ La requête présentée doit-elle compter le nombre de participants (count(id)) ? Pourquoi un count, sinon ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut Précisions
    Citation Envoyé par Maljuna Kris Voir le message
    Saluton,
    Le problème vient probablement du GROUP BY.
    Mais je ne comprends pas du tout la logique de la table.
    Si toutes les années sont représentées dans chaque ligne, à quoi cela sert-il de faire un GROUP BY ?

    Bonjour
    j'ai du mal m'expliquer
    en, fait, j'ai une table ou j'ai importé des csv des différentes années ,
    du coup, j'ai plusieurs entrée avec la même personne, exemple pierre dupond est présent 5 fois car il a participé à cinq colloques,

    A partir de cette base de données, j'ai créé cette requète pour me créer un tableau excel que je vais utiliser pour me créer une table propre (que j'imporetais en csv) que je pourrais utilisée dans le futur
    le principe étant qu'il n'y ait plus qu'un seul enregistrement d'une personne, mais que ma requète compile lles infos d'une meême personnes .
    Le seul éléments que j'ai tout le temps rpésents est l'adresse email c'est pour celà que j'ai fqit une group BY email
    cette requète n'a donc que pour seul intérêt que de me créer une belle base bien propre que je pourrais utilisé dans le futur ...

    je sais pas si je suis plus clair ..

  5. #5
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    je sais pas si je suis plus clair ..
    pas trop, non.
    En fait, dans chaque enregistrement récupéré du CSV initial une seule colonne parmi les colonnes 20004-2005-....-2008 est renseignée, c'est ça ?
    Alors sur chaque colonne il te faut utiliser GROUP_CONCAT
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/10/2005, 13h25
  2. case/when avec plusieurs valeurs pour le then
    Par Neo41 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2005, 15h58
  3. Pb avec case when !
    Par Brice Yao dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/08/2005, 08h20
  4. Structure CASE WHEN en Interbase
    Par tchaman dans le forum InterBase
    Réponses: 8
    Dernier message: 13/12/2004, 16h18
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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