Partage
  • Partager sur Facebook
  • Partager sur Twitter

Division de deux champs depuis 2 requêtes en SQL

Sujet résolu
    11 novembre 2017 à 17:57:12

    Bonjour,

    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

    • Partager sur Facebook
    • Partager sur Twitter
      13 novembre 2017 à 11:43:09

      Bonjour,

      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 ))



      -
      Edité par philodick 13 novembre 2017 à 11:43:19

      • Partager sur Facebook
      • Partager sur Twitter
        14 novembre 2017 à 10:40:52

        Bonjour,

        Merci de la réponse, mais ça ne fonctionne pas, j'ai une erreur 

        #1241 - Operand should contain 1 column(s)

        en ne conservant que COUNT(*) dans la deuxième requête c'est pareil même erreur?

        en supprimant GROUP BY dans la deuxième requête c'est pareil même erreur?

        Merci de votre aide

        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2017 à 11:08:35

          Bonjour,

          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 )

          Soit tu le fais côté applicatif ...

          -
          Edité par Benzouye 14 novembre 2017 à 11:09:20

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            14 novembre 2017 à 15:31:57

            Merci beaucoup c'est OK

            je met le sujet résolu

            • Partager sur Facebook
            • Partager sur Twitter

            Division de deux champs depuis 2 requêtes en SQL

            × 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.
            • Editeur
            • Markdown