Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête SQL : tri par jour

    3 mai 2021 à 12:18:45

    Bonjour,

    Dans le cadre d'un projet, je possède cette structure de données sous PostgreSQL (c'est tout à fait normal si les 2 tables de mesure ne sont pas reliées :
    L'attribut date correspond au format 01-01-2015, à partir duquel j'avais préalablement ajouté une colonne jour qui m'affiche le jour de la semaine grâce à une fonction python.

    J'aimerais maintenant réaliser une moyenne de comptage par jour de la semaine, puis ordonner par jour croissant 'Monday, Tuesday, etc',, ce que je n'arrive pas à faire.
    La requête suivante classe par ordre alphabétique de jour, pas par ordre tout court. J'ai essayé la fonction DAYOFWEEK dans tous les sens, pas moyen non plus.
    select jour, avg(mesures_quotidiennes.valeur)
    from mesures_quotidiennes
    inner join mesure on mesures_quotidiennes.date=mesure.date
    group by jour
    ORDER BY jour

    Y aurait-il une fonction qui me permettrait ce tri, ou dois-je créer une nouvelle table avec une colonne n°_jour (ex : Monday --> 1...) qui me permettrait de réaliser ce tri.

    Merci à vous !
    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2021 à 13:52:09

      Bonjour,

      simplonien a écrit:

      L'attribut date correspond au format 01-01-2015

      Tu stockes une date dans un champ de type VARCHAR ? Pourquoi ne pas avoir utilisé un champ de type DATE ? Tu n'aurais pas ce problème avec ... Si tu peux, corrige cela ...

      Après tu peux par exemple "tricher" avec une table de correspondance :

      SELECT
      	M.jour,
      	AVG( MQ.valeur ) AS moyenne
      FROM
      	mesures_quotidiennes MQ
      		INNER JOIN mesure M
      			ON MQ.date = M.date
      		INNER JOIN (
      				SELECT 1 AS num_jour, 'Monday' AS jour
      				UNION
      				SELECT 2 AS num_jour, 'Tuesday' AS jour
      				UNION
      				SELECT 3 AS num_jour, 'Wednesday' AS jour
      				UNION
      				SELECT 4 AS num_jour, 'Thursday' AS jour
      				UNION
      				SELECT 5 AS num_jour, 'Friday' AS jour
      				UNION
      				SELECT 6 AS num_jour, 'Saturday' AS jour
      				UNION
      				SELECT 7 AS num_jour, 'Sunday' AS jour
      			) J
      			ON M.jour = J.jour
      GROUP BY M.jour
      ORDER BY M.num_jour
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        3 mai 2021 à 15:40:45

        Bonjour,

        C'était déjà un champ de type 'date' étant donné qu'il a pu le détecter pour m'en donner le jour de la semaine.

        J'ai juste eu 2 petits modifs à réaliser à la fin du script, mais cela fonctionne, merci beaucoup pour votre aide !

        En gros, si j'ai bien compris, ça créé une nouvelle colonne virtuelle num_jour, ou le Monday est remplacé par le 1, etc... ?

        -
        Edité par yoann_lv 3 mai 2021 à 15:46:12

        • Partager sur Facebook
        • Partager sur Twitter
          3 mai 2021 à 15:48:33

          simplonien a écrit:

          C'était déjà un champ de type 'date' étant donné qu'il a pu le détecter pour m'en donner le jour de la semaine

          Je ne sais pas, dans le modèle posté on voit le jour et la date comme des champs de type texte ... et le jour est stocké en base ... ne semble pas issu directement de la date (ce qui est bof d'ailleurs).

          Sinon avec postgre tu as la fonction extract qui permet de retrouver depuis un champ date les infos voulues.

          https://www.postgresql.org/docs/9.1/functions-datetime.html

          EXTRACT( DOW FROM colonnedate )

          -
          Edité par Benzouye 3 mai 2021 à 15:49:18

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          Requête SQL : tri par jour

          × 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