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 :

Probleme Group by sur 2 tables


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut Probleme Group by sur 2 tables
    Bonjour,

    J'ai un petit problème que je n'arrive pas à résourdre. J'ai 2 tables : une table client (idclient, sexeclient) et une table quantite(idclient, quantiteres). Je souhaiterais faire un count (sexeclient) sur la table client récupérer la quantite associée à ce client et faire un group by sur le sexe.

    Voilà ce que j'ai essayé de faire, mais ça me renvoi une erreur sous oracle : ORA-00979 N'est pas une expression GROUP BY.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(sexeclient), quantiteres 
    FROM 
    a.client, b.quantiteres
    WHERE a.client.idclient = b.quantite.idclient
    GROUP BY a.client.sexeclient;


    Est ce que quelqu'un aurait une idée ??
    Merci.

  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
    Je crois que vous n'avez pas vraiment compris à quoi sert la fonction count() !

    Présentez-nous un petit jeu d'essai, ainsi que ce que vous souhaitez obtenir.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Ben je pense que la fonction count permet de compter le nombre de lignes incluses dans une table.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select sexeclient, count(sexeclient) as "nombre" from a.client
    group by sexeclient;
    Mon problème vient surtout du group by où j'ai une erreur ORA-00979 N'est pas une expression GROUP BY.

    Ce que je souhaite avoir c'est de compter le nombre de feminin et de masculin enregistrer dans ma table avec la quantite de ressource qui leurs sont associés et de regrouper les resultats par sexe.

  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
    J'ai mieux compris votre besoin, mais je vais vous laisser chercher un peu.
    Pour vous aider, le début de votre requête est relativement correct.

    Mais là où vous faites une erreur c'est que vous ne voulez pas la quantité associée, mais toutes les quantités associées.

    N'hésitez pas également à mettre dans le select toutes les informations présentes dans le group by.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Merci pour le retour de réponses. Oui c'est bien toutes les quantités associées que je veux.

    si je comprends bien, ma requête devrait se transformer en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(sexeclient), quantiteres 
    FROM 
    a.client, b.quantiteres
    WHERE a.client.idclient = b.quantite.idclient
    GROUP BY (a.client.sexeclient, b.quantites);
    C'est bien ça ? Je sèche litteralement

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    J'ai pas encore testé, mais suis dans le bon ?

  7. #7
    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
    Non, il vous faut trouver une seconde fonction d'agrégat pour les quantités !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Un peu de lecture pourrait également vous mettre sur la voie : http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    Merci pour le lien.

    Voilà ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sexeclient, sum(quantiteres), count(sexeclient) as "nombre sexeclient" 
    from a.client, b.quantite where a.client.idclient = b.quantite.idclient
    group by (a.client.sexeclient, b.quantite.quantiteres);
    En résultat j'ai :
    Sexeclient sum(quantite) Nombre sexeclient
    F 0 471
    I 0,1 1
    I 300 3
    F 1000 1
    F 16 2
    M 976,49 1

    En fait, ce que j'aurais souhaité avoir c'est un regroupement sur la nature du sexe du client :

    Sexeclient sum(quantite) Nombre sexeclient
    F 0+1000+16 474
    I 0,1+300 4
    M 976,49 1

    Y a un truc qui m'échappe

  10. #10
    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
    Vous dites :
    j'aurais souhaité avoir c'est un regroupement sur la nature du sexe du client
    Vous codez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY a.client.sexeclient, b.quantite.quantiteres

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    ben en fait, si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY a.client.sexeclient
    Ce qui serait plus logique ça me génère une erreur.

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    Du coup je suis arrivé à obtenir ce que je voulais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select sexeclient, count(a.client.sexeclient) as "nombre" 
    from a.client, b.quantiteres 
    where a.client.idclient = b.quantiteres.idclient
    group by (sexeclient);
    J'ai plus l'erreur ORA-00978.

    Merci d'avoir essayé de m'aider.

  13. #13
    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
    N'hésitez pas à utiliser des alias pour vos tables, ainsi que les jointures ANSI.
    Votre requête s'écrirait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        cl.sexeclient,
        sum(qt.quantiteres),
        count(cl.sexeclient) AS "nombre sexeclient" 
    FROM
        a.client cl
        INNER JOIN b.quantite qt
          ON qt.idclient = cl.idclient
    GROUP BY
        cl.sexeclient;

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Points : 62
    Points
    62
    Par défaut
    Ok merci pour le conseil, c'est vrai que ça fait plus propre comme vous l'avez écrit.

    Merci encore pour l'aide.

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

Discussions similaires

  1. Probleme de requete sur plusieurs tables
    Par Hitmaaan dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2006, 22h20
  2. probleme de requetes sur des tables volumineuses
    Par abdoracle dans le forum Oracle
    Réponses: 6
    Dernier message: 14/06/2006, 15h41
  3. Réponses: 8
    Dernier message: 17/05/2006, 14h32
  4. Group by sur plusieurs table de même squelette
    Par hackrobat dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 13/03/2006, 19h41
  5. Probleme heritage : References sur la table parente
    Par Belgar dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h11

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