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 :

COUNT + SUM possible ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 96
    Points : 45
    Points
    45
    Par défaut COUNT + SUM possible ?
    Bonjour,
    J'ai d'abord testé, puis cherché en Francais, en Anglais.. mais soit je n'ai pas réussi à adapter les exemples soit mon cas est particulier.

    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DATE_FORMAT( FROM_UNIXTIME( user_regdate ) ,  '%Y/%m' ) AS pDate, COUNT( user_id ) AS nombre
    FROM  `phpbb3_users` 
    GROUP BY YEAR( FROM_UNIXTIME( user_regdate ) ) , MONTH( FROM_UNIXTIME( user_regdate ) ) 
    ORDER BY pDate ASC
    Cette requête me permet d'afficher le nombre d'inscriptions par mois sur mon forum.

    Ca marche très bien, maintenant j'aurai aimé avoir le cumul par mois (SUM) et là je sèche...

    J'ai essayé naivement de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DATE_FORMAT( FROM_UNIXTIME( user_regdate ) ,  '%Y/%m' ) AS pDate, COUNT( user_id ) AS nombre, SUM(nombre) AS cumul
    FROM  `phpbb3_users` 
    GROUP BY YEAR( FROM_UNIXTIME( user_regdate ) ) , MONTH( FROM_UNIXTIME( user_regdate ) ) 
    ORDER BY pDate ASC 
    LIMIT 0 , 30
    Mais biensur je me suis pris un "#1054 - Unknown column 'nombre' in 'field list'".

    Est il possible d'obtenir ce que je cherche ?


    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je pense qu'il faudrait du récursif et ça n'existe pas chez MySQL.
    Si c'est pour afficher le résultat avec un programme externe, je pense que ce sera plus facile dans le langage de programmation dudit programme.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    je te conseille de séparer les années au niveau des dates... comprends bien que ton problème vient du fait que tu veux faire des opérations ensemblistes en même temps sur 2 niveaux: les mois et les années

    la solution est simple:
    une procédure stockée qui stocke le résultat de ta requête dans une table temporaire et:
    • tu fais ensuite un select sur elle avec l'année,ton sum sur l'année et un group by sur l'année
    • tu fais un select sur elle pour afficher les résultats par années/mois
    • tu drop la table temporaire (si tu fais d'autres traitements, autan pas alourdir la charge mémoire)


    coté php (ou autre), tu récupères facilement les 2 types de résultats pour en faire ce que tu veux, pas de parcours multiple des données pour rien...

    donc sépare les dates en mois et années dans le select (et non le group by), ça simplifiera l'interprétation et les traitements ensuite...

    voilà tu as les 2 possibilités (somme en langage serveur ou mysql) mais tu devras faire cette rectification...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    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 : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    As-tu regardé du côté de l'option WITH ROLLUP du 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)

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je ne savais pas qu'on pouvait faire ça avec MySQL !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 96
    Points : 45
    Points
    45
    Par défaut
    un grand merci pour vos réponses.

    Pour le ROLLUP j'ai ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DATE_FORMAT( FROM_UNIXTIME( user_regdate ) ,  '%Y/%m' ) AS pDate, COUNT( user_id ) AS nombre, SUM( nombre ) AS cumul
    FROM  `phpbb3_users` 
    GROUP BY YEAR( FROM_UNIXTIME( user_regdate ) ) , MONTH( FROM_UNIXTIME( user_regdate ) ) 
    WITH ROLLUP
    ORDER BY pDate ASC 
    LIMIT 0 , 30
    #1221 - Incorrect usage of CUBE/ROLLUP and ORDER BY

    Pour Éric : c'est pas si "simple" pour moi
    J'ai des connaissances plus ou moins limités au C.R.U.D

    Je ne sais pas ce qu'est une procédure stockée.
    Dans l'état actuel je n'ai accès qu'a phpmyadmin et Excel pour afficher les données exportés.
    C'est pour faire un document de l'état des lieux, pas une interface de stats.

  7. #7
    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 : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Si tu avais lu la doc dont j'avais fourni le lien, tu aurais vu que c'est WITH ROLLUP ou ORDER BY, mais pas les deux.
    Tu peux par contre jouer sur les clauses DESC ou ASC de chaque colonne du 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)

Discussions similaires

  1. Sélection avec SUM ou COUNT ou pas possible ?
    Par kiriaphil dans le forum Requêtes
    Réponses: 8
    Dernier message: 27/12/2012, 11h40
  2. [AC-2007] Group By, Count, SUM je m'y perd !
    Par Rapheux dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/05/2011, 12h50
  3. COUNT, SUM et jointures
    Par Delprog dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/06/2010, 15h43
  4. Requete COUNT + SUM
    Par Seth77 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/05/2007, 04h42
  5. Sum et COUNT
    Par pmboutteau dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/10/2005, 14h28

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