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 on on multiple columns same values.


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Manipulateur en electro-radiologie medicale
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Manipulateur en electro-radiologie medicale
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Count on on multiple columns same values.
    Bonjour à tous,
    Je suis désolé vous allez peut-être trouver ça trop facile.
    Je tiens à signaler qu'avant de poster j'ai fait des recherches mais j'avoue que le sql n'est pas trop ma tasse de thé.

    SUJET :
    J'ai un table avec plusieurs colonnes remplie de chiffres 1 à 10.
    Colonnes : serie_1, serie_2, serie_3,...
    Values : 1 à 10

    J'aimerais compter le nombres de chiffres présent individuellement.
    Exemple : le nombre de 3 mais dans tte les colonnes.

    J'aimerais un résultat style (Group by)

    Serie Count
    1 35
    2 53
    3 210
    4 24
    5 124
    6 ...

    Sur une colonne c'est facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT (SERIE_1)
    GROUP BY SERIE_1.
    Il doit falloir le faire sur chaque colonne et faire un SUM
    Mais je n'ai franchement pas réussi.

    Désolé pour vous ce n'est pas un grand défi, merci par avance à celui/celle qui m'aidera.

    Codinguement bouman 🙃

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Pour compter sur une colonne, il faut faire ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select serie_1,count(*)
    from LaTable
    group by serie_1
    ici comme il y a plusieurs colonnes, il faut faire une requête par colonne, et sommer le tout:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select valeur,sum(nombre)
    from
    (
    select serie_1 as valeur,count(*) as nombre
    from LaTable
    group by serie_1
    union all
    select serie_2,count(*)
    from LaTable
    group by serie_2
    ...
    ) group by valeur
    Dénormalisation, quand tu nous tient…

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 345
    Points : 39 743
    Points
    39 743
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bouman Voir le message
    J'ai un table avec plusieurs colonnes remplie de chiffres 1 à 10.
    Colonnes : serie_1, serie_2, serie_3,...
    Values : 1 à 10

    J'aimerais compter le nombres de chiffres présent individuellement.
    Exemple : le nombre de 3 mais dans tte les colonnes.
    D'après ce que je comprends, on n'est pas dans un cas de dénormalisation, on a juste 10 colonnes et on veut compter, pour chacune d'elles, combien de fois on rencontre la valeur "3" par exemple

    en ce cas la solution est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select count (case when col1=3 then 1 end) as col1
         , count (case when col2=3 then 1 end) as col2
         , count (case when col3=3 then 1 end) as col3
         , ...
         , count (case when colA=3 then 1 end) as colA
    from ma_table

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    escartefigue => je ne pense pas que ce soit ce que bouman attend.
    De ce que je comprends de son exemple il veut le nombre total de chaque valeur toutes colonnes confondues.

    Tatayo.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Manipulateur en electro-radiologie medicale
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Manipulateur en electro-radiologie medicale
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Exact je voudrais savoir combien de fois chaque chiffres est présent dans tte les colonnes confondu.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    806
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 806
    Points : 1 537
    Points
    1 537
    Par défaut
    Bonjour,

    On est d'accord sur le fait que la présence d'indice dans le nom des colonnes nous indique que la phase de normalisation des données est douteuse.
    Du coup, la bonne idée du début "on fait ça comme ça, c'est plus simple" se transforme en "et merde, comment qu'on fait maintenant".
    Classique.

    La solution est de représenter la donnée de manière "normale" pour pouvoir la traiter.
    Ce sera long, voire très long en fonction du volume.
    Mais que voulez-vous mon petit Monsieur, on fait avec ce qu'on a.

    Normalement, le code a été fourni par tatayo.
    Il mérite +1 et que le post soit marqué comme résolu.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Manipulateur en electro-radiologie medicale
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Manipulateur en electro-radiologie medicale
    Secteur : Santé

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Pour compter sur une colonne, il faut faire ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select serie_1,count(*)
    from LaTable
    group by serie_1
    Ici comme il y a plusieurs colonnes, il faut faire une requête par colonne, et sommer le tout:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select valeur,sum(nombre)
    from
    (
    select serie_1 as valeur,count(*) as nombre
    from LaTable
    group by serie_1
    union all
    select serie_2,count(*)
    from LaTable
    group by serie_2
    ...
    ) group by valeur
    Dénormalisation, quand tu nous tient…

    Tatayo.
    J'ai cela comme erreur.

    MySQL a répondu : Documentation
    #1248 - Every derived table must have its own alias

    Ok J'ai mis un alias "C" a mon from et c'est bon !

    Correction et merci Tatayo !
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    select valeur,sum(nombre)
    from
    (
    select serie_1 as valeur,count(*) as nombre
    from LaTable
    group by serie_1
    union all
    select serie_2,count(*)
    from LaTable
    group by serie_2
    ...
    ) C group by valeur

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Il suffit de spécifier un alias pour la sous-requête... Mais un simple recherche sur l'erreur aurait donné la solution.

    Tatayo.

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

Discussions similaires

  1. Insert multiple (INSERT INTO ...VALUES SELECT...)
    Par acognard dans le forum Débuter
    Réponses: 7
    Dernier message: 13/05/2014, 13h42
  2. ASEMON 2.7x / Invalid column index value 2
    Par JBO67 dans le forum Outils
    Réponses: 0
    Dernier message: 23/02/2012, 13h57
  3. Select all group having same value
    Par olibara dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/01/2012, 13h26
  4. Requête ORDER BY Multiple Columns
    Par hgushgus dans le forum Requêtes
    Réponses: 10
    Dernier message: 15/12/2011, 10h29

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