Requête SQL : Tri par jour

chaldeen Messages postés 14 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Dans le cadre d'un projet, je possède cette structure de données (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 !

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    peux-tu donner le type de chacun de tes champs?
    peux-tu donner un exemple de ce que contiennent tes tables mesures_quotidiennes et mesure, ainsi que le résultat attendu?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      qu'as-tu essayé avec DAYOFWEEK?
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je pense que le champ jour doit être supprimé de la table.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        moi j'essaierais ainsi:
        select DATENAME(WEEKDAY, date), DATEPART(WEEKDAY, date), avg(valeur)
        from mesures_quotidiennes
        group by DATENAME(WEEKDAY, date), DATEPART(WEEKDAY, date)
        ORDER BY DATEPART(WEEKDAY, date)
        0
    3. chaldeen Messages postés 14 Statut Membre
       
      Bonjour, oui voici les types de chaque champ :
       #   Column      Non-Null Count   Dtype  
      --- ------ -------------- -----
      0 id 567725 non-null int64
      1 date 567725 non-null object
      2 id_station 567725 non-null int64
      3 valeur 565129 non-null float64
      4 heure 530400 non-null object
      5 type 660 non-null float64
      6 jour 567725 non-null object


      Voici le contenu de la table Mesure:


      Et de la vue Mesures_quotidiennes :


      J'obtiens ce message d'erreur lorsque je fais votre code :
      SQL Error [42703]: ERREUR: la colonne « weekday » n'existe pas
      Position : 17

      Weekday correspondait-elle à une fonction ?
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > chaldeen Messages postés 14 Statut Membre
         
        quel logiciel utilises-tu?
        0
  2. chaldeen Messages postés 14 Statut Membre
     
    Dans ces captures, DBeaver
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Bonjour,
      Et comme SGBD ? SqlServer ? Quelle version ?
      Ou alors tu utilises autre chose ? Mysql ? PostgreSql ? autre ??
      0
  3. chaldeen Messages postés 14 Statut Membre
     
    Bonjour,
    J'utilise PostGreSQL.
    Merci à vous, cela change-t-il quelque chose concernant la requête ?
    Merci
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Vu que tu as posté dans sqlserver... Oui ca change beaucoup de choses !!

      Je déplace donc ta question dans le bon forum !
      0