IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

GROUP BY et ORDER BY réticents


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut GROUP BY et ORDER BY réticents
    Bonjour,

    j'essaye de classer la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT T.CODVEHI, C.IDCOUR, SH.NUORDRE, SH.HARRIV, SH.HDEPAR 
    FROM TRONCON T, ENGLOBER E, SCONDUC SC, COURSE C, SUCHOR SH, ITINERAIRE I
    WHERE T.IDTRON = E.IDTRON 
    AND E.NUCOND = SC.NUCOND
    AND C.IDTRON = T.IDTRON
    AND C.IDCOUR = SH.IDCOUR
    AND I.IDITI = C.IDITI
    AND I.TYPITI <> 2
    AND SC.JOURS LIKE '%Lundi%'
    GROUP BY C.IDCOUR, SH.NUORDRE 
    ORDER BY T.CODVEHI, SH.MINARRIV ;
    En gros, CODVEHI représente un bus, IDCOUR est l'identifiant de la course sur laquelle se trouve le bus (une course c'est une sorte d'itinéraire composé d'horaires de passage à des points d'arrêts), NUORDRE c'est l'ordre de passage à un point d'arrêt dans la course, les autres sont les horaires.

    Toutefois le résultat n'est pas vraiment classé correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CODVEHI  IDCOUR NUORDRE HARRIV        HDEPAR  
    1/1    322	14	06:16:00	06:16:00
    1/1	322	15	06:16:58	06:16:58
    1/1	322	16	06:19:02	06:19:02
    1/1	322	17	06:20:09	06:20:09
    1/1	323	1	06:22:00	06:38:00
    1/1	322	18	06:22:00	06:22:00
    1/1	323	2	06:39:43	06:39:43
    1/1	323	3	06:41:03	06:41:03
    1/1	323	4	06:43:02	06:43:02
    1/1	323	5	06:44:00	06:44:00
    Comme vous pouvez le voir, l'arrêt numéro 1 de la course 323 se situe avant l'arrêt 18 de la course 322.

    Bien sûr je peux reclasser ça dans mon programme, mais si je pouvais obtenir le classement correct depuis ma requête ça serait plus pratique.

    Vos suggestions sont les bienvenues.
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Et bien, tout simplement, votre ORDER BY n'a pas les bons arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY T.CODVEHI, C.IDCOUR, SH.NUORDRE
    Edit : d'ailleurs j'ai répondu trop vite, votre GROUP BY n'a aucune raison d'exister.

  3. #3
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Alors ... oui, mais non

    SH.MINARRIV c'est l'horaire d'arrivée à un arrêt en secondes (il était en minutes dans une précédente version d'où son nom MINutesARRIVée).

    Dans ma requête je n'affiche que HARRIV et HDEPAR qui sont sous forme hh:mm:ss car c'est plus lisible pour moi.

    Si je prend votre exemple la liste n'est plus classée par horaires croissants. Les numéros de course ne se suivent pas forcément (même si c'est le cas dans l'exemple que je vous ai donné) et on pourrait donc avoir par exemple la course 1734 qui va de 8h à 9h et la course 503 qui va de 9h à 10h.

    Le classement prioritaire se fait sur les horaires, ensuite le numéro d'ordre dans la course (théoriquement on en a même pas besoin vu que si les horaires sont dans l'ordre les numéros d'ordre doivent suivre) et le code véhicule (CODVEHI).

    D'ailleurs je me rend compte que si je supprime le group by et utilise juste "ORDER BY T.CODVEHI, SH.MINARRIV" j'obtiens quasiment la même chose, avec toujours ce problème au niveau du changement de course :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CODVEHI  	IDCOUR  	NUORDRE  	HARRIV  	HDEPAR  
    1/1	321	11	05:50:47	05:50:47
    1/1	321	12	05:52:00	05:52:00
    1/1	321	13	05:53:08	05:53:08
    1/1	321	14	05:54:00	05:54:00
    1/1	322	1	05:58:00	05:58:00
    1/1	321	15	05:58:00	05:58:00
    1/1	322	2	05:59:19	05:59:19
    1/1	322	3	06:00:31	06:00:31
    1/1	322	4	06:01:48	06:01:48
    1/1	322	5	06:03:00	06:03:00
    Quoiqu'il en soit merci d'intervenir sur ce sujet, c'est déjà la 2e fois que vous dépannez mon SQL défaillant
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Faites alors votre tri ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY T.CODVEHI, SH.MINARRIV, C.IDCOUR

  5. #5
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Effectivement ça marche
    En fait, je viens de me rendre compte que le placement des clauses dans un order by était important, je pensais que l'ordre n'importait pas.

    Merci beaucoup.
    The greatest shortcoming of the human race is our inability to understand the exponential function. Albert A. Bartlett

    La plus grande lacune de la race humaine c'est notre incapacité à comprendre la fonction exponentielle.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est une bien étrange réflexion !
    Comment celà pourrait marcher si l'ordre ne comptait pas ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Group by et order by
    Par LebronPA dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/06/2009, 12h36
  2. Requête linq group by et order by
    Par LebronPA dans le forum Linq
    Réponses: 0
    Dernier message: 03/06/2009, 10h44
  3. [SQL] group by et order by dans la même requête ?
    Par thomfort dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/08/2007, 22h31
  4. Distinct, group by et order by
    Par gloubi dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/11/2006, 16h53
  5. [SQL] Jointure,Group BY et ORDER BY COUNT qui marche pas
    Par Stef784ever dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/08/2005, 12h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo