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 :

erreur : "pas d'opérateur de tri"


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut erreur : "pas d'opérateur de tri"
    Bonjour,

    j'ai une erreur sur une requete qui me cause un bon mal de crane!

    Imaginon une table baton :
    - couleur
    - longueur
    - bout_droit
    - bout_gauche
    - proprietaire

    Je souhaite récuperer tous les propriétaires différents des battons qui ont meme couleur, meme longueur et soit le bout droit ou gauche identique.

    Et donc voici la requete que je tente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT COUNT(DISTINCT proprietaire)
    FROM baton
    GROUP BY (couleur, longueur)
    HAVING (bout_droit = bout_droit OR bout_gauche = bout_droit)
    et le SGBD (postgres) de me répondre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR:  n a pas pu identifier un opérateur de tri pour le type record
    ASTUCE : Utilisez un opérateur explicite de tri ou modifiez la requête.
    Quelqu'un d'éclairé peut-il apporter une lumière sur mon casse tête?..

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    bon, bon, bon...

    1°) tu fais un group by sur des champs qui ne sont pas dans le select : bizarre
    2°) ton having est spécial aussi, ça devrait être dans une auto jointure (2 fois la table "batton" pour pouvoir les comparer)
    3°) fais un effort avec le français, ça pique les yeux.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Mathusalem Voir le message
    1°) tu fais un group by sur des champs qui ne sont pas dans le select : bizarre
    ca ne suffit que les champs soient dans la table? avec le from...??

    Citation Envoyé par Mathusalem Voir le message
    2°) ton having est spécial aussi, ça devrait être dans une auto jointure (2 fois la table "batton" pour pouvoir les comparer)
    comment fait-on 2 fois la meme table dans une requete? Je crée 2 tables temporaires??

    Citation Envoyé par Mathusalem Voir le message
    3°) fais un effort avec le français, ça pique les yeux.
    j'aurais jamais pu écrire la disparition... c'est corrigé dans l'ensemble

  4. #4
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    tu peux très bien faire ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
    from batton as b1
    inner join batton as b2
    on (b1.bout_droit = b2.bout_droit OR b1.bout_gauche = b2.bout_droit)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Donc je suis passé a une requete plus conventionnelle.

    J'ai dupliqué en 2 tables temporaires baton soit b1 & b2.

    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(DISTINCT b1.proprietaire) 
    FROM b1, b2 
    WHERE b1.couleur= b2.couleur 
    AND b1.longueur=b2.longueur 
    AND (b1.droite = b2.droite OR b1.droite=b2.gauche OR b1.gauche = b2.droite OR b1.gauche=b2.gauche)
    Mais je vois pas comment faire le group by sur le champ bout_droite et bout_gauche c'est un peu complexe pour moi...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT count(DISTINCT b1.proprietaire) 
    FROM   batton AS b1
           INNER JOIN batton AS b2 
                 ON     b1.couleur  = b2.couleur 
                    AND b1.longueur = b2.longueur 
    WHERE  b1.droite = b2.droite 
       OR  b1.droite = b2.gauche 
       OR  b1.gauche = b2.droite 
       OR  b1.gauche = b2.gauche
    Serait beaucoup plus cohérent !

    A +

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Mathusalem Voir le message
    tu peux très bien faire ce genre de chose :

    j'ai vraiment besoin de compter les propriétaires sur des groupes de batons semblables

    Citation Envoyé par Mathusalem Voir le message
    on (b1.bout_droit = b2.bout_droit OR b1.bout_gauche = b2.bout_droit)[/CODE]
    b2.bout_gauche aussi

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    Ok! On peut faire des WHERE/OR comme des WHERE/AND et avec JOIN ON on peut faire AND deriere (j me comprend).
    Super!! Merci j teste de suite et clos l'affaire.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    ... en fait je continue à suer sur le groupement. Vu que je veux grouper par longueur, couleur, et bout il faudrait que je mette tout ça dans un group by mais aussi que je le mette dans la clause select.

    Je vois comment faire pour couleur et longueur mais je sèche pour bout_droit et bout_gauche.

    Imaginon qu'il existe 8 types de bouts (droit et gauche confondus, il n'y a aps de distinction si ce n'est qu'ils soient a droite ou a gauche)
    et les champs bout_droit et bout_gauche sont des clef etrangeres vers le champ id de la table bout.

    Est ce que vous avez une solution????????

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT longueur, couleur, bout_droit, bout_gauche count(DISTINCT proprietaire)
    je ne selectionne plus les batons qui ont en commun un des deux bouts mais les deux ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 40
    Points
    40
    Par défaut
    et puis avec ce SELECT j'ai le message d'erreur du haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR:  n a pas pu identifier un opérateur de tri pour le type record
    ASTUCE : Utilisez un opérateur explicite de tri ou modifiez la requête.

Discussions similaires

  1. Ne pas définir d'opérateur de tri dans une map
    Par Muetdhiver dans le forum SL & STL
    Réponses: 5
    Dernier message: 14/11/2007, 14h38
  2. ne peut pas simplement "aXSLProc.Process(aCursor);"
    Par didier.cabale dans le forum XMLRAD
    Réponses: 16
    Dernier message: 08/03/2006, 12h25
  3. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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