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 :

Count dans plusieurs colonne d'une même table


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Count dans plusieurs colonne d'une même table
    Salut,

    Sur un site en php avec phpmyadmin j'ai besoin de faire une requète dans une seule table.

    Table MaTable
    Colonne one, two, three

    one two three
    145 548 632
    423 145 846
    145 758 214
    218 805 145

    Je voudrai pouvoir compter le nombre de fois où 145 est dans la colonne one, dans la colonne two et la colonne three et affcher les résultats du genre
    one two three
    2 1 1

    Pour le moment j'ai fais ca :
    SELECT *, Count(one) AS un, Count(two) AS deux, Count(three) AS trois FROM MaTable WHERE one = 145 OR two = 145 OR three = 145 GROUP BY one AND two AND three

    Seul problème, ca m'affiche :
    4
    au lieu de
    2 1 1

    Je sais pas comment distinguer les groupe by pour qu'il m'affiche les résultats séparé au lieu de me grouper le tout.

    Si je fais
    SELECT Count(one) AS un FROM MaTable WHERE one = 145
    J'ai bien 2 qui s'affiche.
    Il me faudrai la même chose sauf sur les 3 colonnes one two three pour m'éviter de faire 3 requêtes différentes.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    Pourquoi mettre les AND

    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
     
    SELECT *  /** Je trouve le "*" facultatif **/ 
             , Count(one) AS un
             , Count(two) AS deux
             , Count(three) AS trois 
     
    FROM 
            MaTable 
     
    WHERE 
             one = 145 
        OR two = 145 
        OR three = 145 
     
    GROUP BY 
                 one 
               , two 
               , three
    Non ?
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci, en faisant comme tu m'as dit et sans le (*) dans le SELECT j'ai :

    1 1 1 1

    si je met juste GROUP BY one j'ai :

    2 1 1

    Seulement j'ai besoin d'additionner les two et les three.
    Dans ma table j'en ai plusieurs et ca me fait un truc genre :
    24 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 4 1 1 1 2 6 3 1 1 1

    Ca me compte bien le 24 avec juste un GROUP BY one mais les colonne two et three j'arrive pas.
    Il me fait des paquets au fur et à mesure.
    Je sais pas si je m'explique bien ... c'est pas évident.

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Je sais pas trop si c'est faisable en php :

    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
     
    SELECT T1.[CountA]
             , T2.[CountB]
             , T3.[CountC]
     
    FROM
            ( SELECT COUNT(one) AS CountA
                    FROM MaTable
                        WHERE one = 145
            ) T1,
     
                       (SELECT COUNT(two) AS CountB
                            FROM MaTable
                                WHERE two = 145
                        ) T2,
     
                                 (SELECT COUNT(three) AS CountC
                                      FROM MaTable
                                          WHERE three = 145
                                  ) T3
     
    ;
    Ou alors remplacer ta table avec 2 ALIAS et des jointures externes si je ne me trompe...

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 091
    Points : 30 870
    Points
    30 870
    Par défaut
    Une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  SUM(CASE one WHEN 145 THEN 1 ELSE 0 END)    AS one
        ,   SUM(CASE two WHEN 145 THEN 1 ELSE 0 END)    AS two
        ,   SUM(CASE three WHEN 145 THEN 1 ELSE 0 END)  AS three
    FROM    matable
    WHERE   one = 145
        OR  two = 145
        OR  three = 145
    ;
    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.

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    T'es en MySQL ?
    Un petit truc marrant pour faire comme al1, en plus naze :
    sign(one - 145) renvoie 0 one = 145, -1 si one est plus petit, 1 sinon.

    Donc 1 - abs(sign(one - 145)) Renvoie 1 si =, 0 sinon.

    Donc tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  sum(1 - abs(sign(one - 145)))  AS one
        ,   sum(1 - abs(sign(two- 145)))    AS two
        ,   sum(1 - abs(sign(three - 145)))   AS three
    FROM    matable
    Oui, je sais, c'est pas de la norme SQL...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Merci pour les réponses.

    J'ai pas essayé ta solution "pacmann" mais celle de "al1_24" fontionne parfaitement donc je vais la garder.

    Merci à tous

  8. #8
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir tout le monde,

    Dit al1_24 est-ce que tes CASE ne sont pas plus lourd que la solution des tables dérivées ?

    Ce doit être lourd, non, faire un SUM sur un CASE avec des conditions WHERE en plus ?

    Merci d'avance de tes explications
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



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

Discussions similaires

  1. [MySQL] modifier le début de deux champs dans plusieurs enregistrements d'une même table
    Par corbin dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2011, 09h40
  2. Réponses: 1
    Dernier message: 24/02/2011, 19h11
  3. faire l'union de plusieurs colonnes d'une même table
    Par knadege dans le forum Langage SQL
    Réponses: 13
    Dernier message: 15/04/2010, 15h08
  4. Plusieurs Champs d'une même table dans plusieurs textebox
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/09/2006, 11h32
  5. Recherche dans plusieurs colonnes d'une table
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 26/07/2006, 11h58

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