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 :

Requete SQL avancé


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut Requete SQL avancé
    Bonjour,
    j'ai une requete SQL qui demande de :
    Quel est pour chaque localité, le nombre moyen de commande par client par client.
    c'est dessus le schéma relationnel:
    CLIENT(code,nom,prenom,localite,num_tel, categorie)

    COMMANDE(num_cmd, #code, date_cmd)

    ARTICLE(ref_article, designation, prix_ht, TVA)

    LIGNE_CMD(#num_cmd, #ref_article, quantite, remise)

    j'ai trouver des difficulté à résoudre cette requte qui peut me proposer une solution

  2. #2
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 243
    Billets dans le blog
    16
    Par défaut
    Bonsoir emna1987,

    On n'a rien sans rien : il faudrait que vous commenciez par montrer votre tentative de solution.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut
    je souhaite compter les num_cmd par client et par localite (select localite, code, count(*) from client,commande where client.code=commande.code group by localite, code) jusque la pas de probleme mais je souhaiterais en une seule requete faire une moyenne de ce count parapport au count calculé en groupant les lignes par localité en terme sql je veux traduire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) AS nb_commande_par_client et par localite  FROM commande,client where client.code=commande.code group by localite, code 
    SELECT COUNT(*) AS nb_commande_par_localite FROM commande,client where client.code=commande.code group by localite
    Et en suite la division entre les 2 select je suis bloqué de trouver la requete finale

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 199
    Billets dans le blog
    1
    Par défaut
    Les jointures s'écrivent dans la clause FROM et non la clause WHERE

    Il s'agit ici de compter le nombre total de commandes COUNT(*) divisé par le nombre distinct de clients COUNT(distinct client.code) pour chaque localité GROUP BY cli.localite

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 74
    Par défaut
    j'ai essayé d'ecrire cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select x.number/y.number 
     
    from(select localite,code,count(*) "number" from client,commande
    where client.code=commande.code
    group by localite,code) x
    join(select localite,count(*) "number"
    from client,commande
    where client.code=commande.code) y;
    it return me an error:ERROR at line 1:01747:invalid user.table.column, table column, or column spécification

  6. #6
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 243
    Billets dans le blog
    16
    Par défaut
    Bonsoir emna,


    Il manque une condition de jointure pour votre JOIN :

    ON x.localite = y.localite

    Par ailleurs, quand vous codez :

    SELECT localite, code

    Le SGBD veut savoir si c’est la colonne code de la table client ou bien celle de la table commande qui est à considérer : l’ambiguïté est à lever en préfixant le nom de la colonne par un nom de table.

    Codez plutôt :

    SELECT x.localite, code, x.number, y.number, 100*x.number/y.number
    FROM
        (SELECT localite, client.code, COUNT(*) as "number" 
         FROM   client, commande
         WHERE  client.code = commande.code
         GROUP BY localite, client.code) as x
    JOIN 
        (SELECT localite, COUNT(*) as "number"
         FROM client, commande
         WHERE client.code = commande.code
         GROUP BY localite) as y
    ON x.localite = y.localite
    
    Et pour être dans le sens de l’Histoire :

    SELECT x.localite, code, x.number, y.number, 100*x.number/y.number 
    FROM
        (SELECT localite, a.code, COUNT(*) as "number" 
         FROM   client as a join commande as b on a.code = b.code
         GROUP BY localite, a.code) as x
    JOIN 
        (SELECT localite, COUNT(*) as "number"
         FROM  client as a join commande as b on a.code = b.code
         GROUP BY localite) as y
    ON x.localite = y.localite
    
    Les champions de SQL arriveront certainement à simplifier tout ça...


     

Discussions similaires

  1. requete sql avancée
    Par emna1987 dans le forum SQL
    Réponses: 17
    Dernier message: 05/12/2018, 23h11
  2. Requete SQL Avancée
    Par Lost In Translation dans le forum Requêtes
    Réponses: 5
    Dernier message: 31/08/2007, 08h44
  3. Aide Pour Requete SQL Simple ... Merci d'avance :)
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/12/2005, 11h39
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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