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

Langage SQL Discussion :

[MySQL] GROUP BY conditionnel


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut [MySQL] GROUP BY conditionnel
    Bonjour,
    J'ai une table du type
    ID | id_client | valeur

    et je souhaiterai obtenir quelquechose du type
    ID | id_client | nbre de valeurs entre 1 et 2 | nbre de valeurs entre 3 et 4

    Comment puis je faire ceci ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Par défaut
    Bonjour,

    Avec union :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select ID, id_client, sum(val1_2), sum(val3_4)
    from (select ID, id_client, count(valeur) as val1_2, 0 as val3_4
    <div style="margin-left:40px">from MaTable
    where valeur between 1 and 2
    union 
    select ID, id_client, 0 as val1_2, count(valeur) as val3_4
    from MaTable
    where valeur between 3 and 4)</div>group by ID, id_client
    Bien sur si la version de MySQL accepte les sous-requêtes.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 137
    Par défaut
    En ajoutant des GROUP BY, ça sera plus efficace
    Citation Envoyé par TheRussian
    Bonjour,

    Avec union :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select ID, id_client, sum(val1_2), sum(val3_4)
    from (select ID, id_client, count(valeur) as val1_2, 0 as val3_4
    
    from MaTable where valeur between 1 and 2 group by ID, id_client union select ID, id_client, 0 as val1_2, count(valeur) as val3_4 from MaTable where valeur between 3 and 4 group by ID, id_client )
    group by ID, id_client
    Bien sur si la version de MySQL accepte les sous-requêtes.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut
    Merci c'est parfait

    PS: j'avais entendu dire que le union c'était pas bien et que tout ce qui est fait avec peut etre fait autrement. C'est vrai ou c'est juste une rumeur urbaine ?

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    En tout cas ici tu peux faire un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Id, id_client, 
           sum(case when valeur between 1 and 2 then 1 else 0 end), 
           sum(case when valeur between 3 and 4 then 1 else 0 end)
    FROM MaTable
    WHERE valeur between 1 and 4
    GROUP BY ID, id_client

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Par défaut
    Et je supose qu'en terme de performances ta proposition est mieux ?¿?

Discussions similaires

  1. Requete avec group by conditionnel
    Par rolintoucour dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/07/2012, 13h12
  2. Group By conditionnel
    Par thunderfear dans le forum Requêtes
    Réponses: 0
    Dernier message: 13/08/2011, 12h51
  3. GROUP BY conditionnel
    Par Elephantman dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/01/2009, 20h22
  4. Requete mysql group by
    Par yobogs dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/11/2005, 22h38
  5. mysql group by???
    Par rayno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/11/2004, 13h53

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