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

Oracle Discussion :

Expression GROUP BY Oracle


Sujet :

Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut Expression GROUP BY Oracle
    Bonjour à tous ,

    je sais pas pourquoi l'expression GROUP BY ne veut pas marcher chez moi, voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select cpte, client.id ,codca, aut_deb, utl_debit, aut_com, utl_come, aut_fct, utl_fcte, aut_cmlt, utl_cmlte, aut_rsp, utl_rspe, aut_esg, utl_esge, impaye, mmm, smv, periode 
    from client
    JOIN portefeuille
    ON client.id=portefeuille.id
    JOIN eng_dge@dbcg_bdpbc
    on eng_dge.cpte= portefeuille.n_cpte 
    where periode = '31-oct.-2010'
    group by codca;
    La requête marche bien sans l'expression GROUP BY.

    Merci pour la coopération

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Normal :

    1) il n'y a pas de calcul d'agrégat comme SUM, MAX, MIN, AVG... Or un GROUP BY ne sert que s'il y a des calculs d'agrégats

    2) lorsque vous voulez mettre une clause GROUP BY, toutes les colonnes non agrégées de la clause SELECT doivent figurer dedans. Dans votre cas le GROUP BY devrait porter sur les colonnes cpte, client.id ,codca, aut_deb, utl_debit, aut_com, utl_come, aut_fct, utl_fcte, aut_cmlt, utl_cmlte, aut_rsp, utl_rspe, aut_esg, utl_esge, impaye, mmm, smv, periode

    Visiblement vous ne maitrisez pas du tout le langage SQL. J'ai l'impression que vous confondez GROUP BY et tri (ORDER BY). L'algorithme utilisé par un GROUP BY ne correspond pas forcément à un tri.
    Si vous voulez trier vos lignes de réponse, utilisez ORDER BY.
    Si vous voulez dé-doublonner les lignes retournées, utiliser l'opérateur DISTINCT dans la clause SELECT.

    Je vous invite à vous former à SQL. C'est un vrai langage ! Mon site web, comme mon livre peuvent vous y aider.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Normal :

    1) il n'y a pas de calcul d'agrégat comme SUM, MAX, MIN, AVG... Or un GROUP BY ne sert que s'il y a des calculs d'agrégats

    2) lorsque vous voulez mettre une clause GROUP BY, toutes les colonnes non agrégées de la clause SELECT doivent figurer dedans. Dans votre cas le GROUP BY devrait porter sur les colonnes cpte, client.id ,codca, aut_deb, utl_debit, aut_com, utl_come, aut_fct, utl_fcte, aut_cmlt, utl_cmlte, aut_rsp, utl_rspe, aut_esg, utl_esge, impaye, mmm, smv, periode

    Visiblement vous ne maitrisez pas du tout le langage SQL. J'ai l'impression que vous confondez GROUP BY et tri (ORDER BY). L'algorithme utilisé par un GROUP BY ne correspond pas forcément à un tri.
    Si vous voulez trier vos lignes de réponse, utilisez ORDER BY.
    Si vous voulez dé-doublonner les lignes retournées, utiliser l'opérateur DISTINCT dans la clause SELECT.

    Je vous invite à vous former à SQL. C'est un vrai langage ! Mon site web, comme mon livre peuvent vous y aider.

    A +
    Oui en effet, ça fait plus que deux ans que j'ai pas développé en SQL, mais bon je me souviens de ce que tu dis, et voici le code que j'ai dû écrire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select  codca, aut_deb, utl_debit, aut_com, utl_come, aut_fct, utl_fcte, aut_cmlt, utl_cmlte, aut_rsp, utl_rspe, aut_esg, utl_esge, impaye, mmm, smv , periode 
    from client
    JOIN portefeuille
    ON client.id=portefeuille.id
    JOIN eng_dge@dbcg_bdpbc
    on eng_dge.cpte= portefeuille.n_cpte 
    where periode = '31-oct.-2010'
    group by codca , sum(aut_deb), sum(utl_debit), sum(aut_com), sum(utl_come), sum(aut_fct), sum(utl_fcte), sum(aut_cmlt), sum(utl_cmlte), sum(aut_rsp), sum(utl_rspe), sum(aut_esg), sum(utl_esge), sum(impaye), sum(mmm), sum(smv), periode ;

    Toutefois, il m'envoie cette erreur :
    ORA-00934: fonction de groupe non autorisée ici



    Merci pour ta coopération

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    dans le select les "SUM" pas dans dans le group by...

    Et à ce moment là, pas sur que ça fonctionne aussi car étonnant que toute ces sommes aient un sens (surtout si ce sont des varchar ), ou ça va faire des truc très bizarres sur certains champs...

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 163
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Normal :

    1) il n'y a pas de calcul d'agrégat comme SUM, MAX, MIN, AVG... Or un GROUP BY ne sert que s'il y a des calculs d'agrégats

    2) lorsque vous voulez mettre une clause GROUP BY, toutes les colonnes non agrégées de la clause SELECT doivent figurer dedans. Dans votre cas le GROUP BY devrait porter sur les colonnes cpte, client.id ,codca, aut_deb, utl_debit, aut_com, utl_come, aut_fct, utl_fcte, aut_cmlt, utl_cmlte, aut_rsp, utl_rspe, aut_esg, utl_esge, impaye, mmm, smv, periode

    Visiblement vous ne maitrisez pas du tout le langage SQL. J'ai l'impression que vous confondez GROUP BY et tri (ORDER BY). L'algorithme utilisé par un GROUP BY ne correspond pas forcément à un tri.
    Si vous voulez trier vos lignes de réponse, utilisez ORDER BY.
    Si vous voulez dé-doublonner les lignes retournées, utiliser l'opérateur DISTINCT dans la clause SELECT.

    Je vous invite à vous former à SQL. C'est un vrai langage ! Mon site web, comme mon livre peuvent vous y aider.

    A +
    Oui je me rends compte de mon erreur
    Merci pour ton aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/01/2012, 11h11
  2. ORA-00979: N'est pas une expression GROUP BY
    Par chakibtag dans le forum SQL
    Réponses: 2
    Dernier message: 09/07/2008, 10h22
  3. ORA-00979: N'est pas une expression GROUP BY
    Par NiGHtyWolf dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2007, 19h11
  4. Expressions régulières et Oracle
    Par nicocolt dans le forum Oracle
    Réponses: 16
    Dernier message: 05/07/2006, 13h51

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