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 :

Fréquence d'apparition de valeur


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Points : 67
    Points
    67
    Par défaut Fréquence d'apparition de valeur
    Bonjour,

    Un peu coincé à cause des capacités limitées de mon cerveau et de mon serveur, je cherche à faire quelque chose d'assez simple , mettons la table suivante,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ID | DATA
    0  | A
    0  | B
    0  | C
    2  | A
    2  | C
    4  | A
    4  | B
    4  | B
    5  | A
    5  | B 
    6  | C
    Je cherche à récupérer pour chaque DATA, les autres data les plus récurrent par ID.
    Par exemple je veux savoir lequel entre C et B apparaît le plus souvent quand A apparait pour chaque ID

    (etape1) Je me suis donc dit de commencer par compter le nombre de B et de C pour chaque ID qui a une DATA = A au moins une fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ID contenant A  | COUNT(B) | COUNT(C)
    0               |    1     | 1
    2               |    0     | 1
    4               |    2     | 0
    5               |    1     | 0
    Ainsi on peut avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DATA | SUM(COUNT(B)) | SUM(COUNT(C))
     A   |  4            |     2
    Au final l'objectif est d'avoir les N data les plus "recurente" pour chaque autre

    Dans notre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Data | 1stMostWiewData | 2ndMostWiewData
    A    |     B           |    C
    B    |     A           |C
    C    |     A           |   B

    Mais je bloque à la premiere étape
    Je l'ai fait avec beaucoup de php et peu de mysql, du coup c'est pas du tout performant et atomise mon serveur.

    Comment arriver à faire ça uniquement en mysql ?
    J'ai juste aucune idée de comment afficher plusieurs count sur une ligne avec un même group by ...

    Merci infiniment d'avance pour tout début de piste :/

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par ithurts Voir le message
    J'ai juste aucune idée de comment afficher plusieurs count sur une ligne avec un même group by ...
    Pour ça, je t'invite à voir cette discussion : http://www.developpez.net/forums/d94...-meme-colonne/
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Bonjour antoun et merci pour votre réponse !

    Je suivais déjà ce topic étroitement
    Toutefois je cite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.article, 
      SUM(CASE WHEN t1.valeur > 0 THEN 1 ELSE 0 END) AS nombreEnregistrementsPositifs,
      SUM(CASE WHEN t1.valeur < 0 THEN 1 ELSE 0 END) AS nombreEnregistrementsNegatifs
    FROM `test` AS t1
    GROUP BY t1.article
    Cette méthode est valide lorsque il y'a un nombre déterminé à l'avance de colonne à ajouter, dans mon cas les data varient de 5 à 9 avec les contenu évoluant dans le temps (et donc les clauses clase when data = ? different)

    Peut être est ce que ce n'est pas possible de faire ça complètement en SQL ?

    Cdt.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Effectivement, c'est une limite de SQL : les colonnes sont statiques et non dynamiques. Maljuna Kris a fait un article qui devrait t'intéresser sur la manière de combiner PHP et MySQL pour faire un tableau croisé : http://moko.developpez.com/articles/...ise-php-mysql/
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. [MySQL] Incrémenter en fonction de la fréquence d'apparition
    Par djdamage dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/07/2009, 16h04
  2. [XL-2007] Calcul d'interval entre deux apparitions de valeur
    Par Jimy6000 dans le forum Excel
    Réponses: 4
    Dernier message: 14/05/2009, 12h35
  3. Compter la fréquence d'apparition
    Par missoly dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/08/2008, 18h48
  4. Récupérer la fréquence d'apparition des trous
    Par lloyd_r dans le forum Signal
    Réponses: 1
    Dernier message: 22/07/2008, 17h45
  5. Fréquence d'insertion de valeurs dans un Vector
    Par pat-trix dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 20/11/2006, 17h20

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