Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2012, 13h51   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 84
Points : 13
Points : 13
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 :
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 :
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
Kijer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 14h41   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 02h58   #3
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 875
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 875
Points : 1 362
Points : 1 362
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...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h50   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 531
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 531
Points : 3 524
Points : 3 524
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 10h59   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Je ne savais pas qu'on pouvait faire ça avec MySQL !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 16h21   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2005
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 84
Points : 13
Points : 13
un grand merci pour vos réponses.

Pour le ROLLUP j'ai ce message :

Code :
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
Citation:
#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.
Kijer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 16h52   #7
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 531
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 531
Points : 3 524
Points : 3 524
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h27.


 
 
 
 
Partenaires

Hébergement Web