J'ai une base SQl contenant une table meteo, j'effectue deux requetes ci dessous qui me retourne sur une periode la somme du champ 'light' par jour et le nombre d'enregistrement par jour.
Ensuite je souhaite faire la division de la somme par le nombre d’enregistrements, la troisième requête me retourne un résultat faux?
requête 1 : Somme light par jour est ok
SELECT DISTINCT DATE(`horloge_esp`),sum(light) FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH) GROUP BY DATE(`horloge_esp`)
requête 2 : Nombre enregistrement par jour est ok
SELECT DISTINCT DATE( horloge_esp ), COUNT(*) FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH) group by DATE( horloge_esp )
requête 3 : tentative de regroupement retourne résultat faux
SELECT DISTINCT DATE( horloge_esp ), sum(light) / (SELECT COUNT(*) FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH))
FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH) group by DATE( horloge_esp )
Merci de votre aide
Philippe
- Edité par PhilippeCORBEL1 11 novembre 2017 à 17:57:52
Logiquement si les deux requêtes sont bonnes, on devrait plutôt avoir :
SELECT
(SELECT DISTINCT DATE(`horloge_esp`),sum(light) FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH) GROUP BY DATE(`horloge_esp`))
/
(SELECT DISTINCT DATE( horloge_esp ), COUNT(*) FROM meteo WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH) group by DATE( horloge_esp ))
Il vaut mieux éviter les SELECT imbriqués autant que possible ... Et au passage le DISTINCT est inutile avec un GROUP BY ...
PhilippeCORBEL1 a écrit:
deux requetes ci dessous qui me retourne sur une periode la somme du champ 'light' par jour et le nombre d'enregistrement par jour.
Ensuite je souhaite faire la division de la somme par le nombre d’enregistrements, la troisième requête me retourne un résultat faux?
Je te propose cette syntaxe en une requête pour faire le décompte et la somme :
SELECT
DATE( horloge_esp ),
COUNT(*) AS nombre,
SUM( light ) AS somme
FROM meteo
WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH)
GROUP BY DATE( horloge_esp )
Après, soit tu mets ton calcul dans le SQL :
SELECT
DATE( horloge_esp ),
COUNT(*) AS nombre,
SUM( light ) AS somme,
SUM( light ) / COUNT(*) AS ratio
FROM meteo
WHERE `horloge_esp` > DATE_SUB(NOW(),INTERVAL 1 MONTH)
GROUP BY DATE( horloge_esp )
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.