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 :

Requête SQL qui me pose problème


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Requête SQL qui me pose problème
    Bonjour,

    Il y a un type de requête SQL qui doit vous paraitre simple mais que je n'ai encore jamais faite et je me demande quelle est la synthaxe exacte.

    Mettons que j'ai une table Client*Chiffres d'affaires avec les 2 colonnes :
    Client_ID Chiffre_Affaires
    1 2000 €
    2 2340 €
    ...

    Quelle est la synthaxe d'une requête SQL qui me permettrait de calculer le nombre de clients qui représentent 80 % du chiffres d'affaire global de tous mes clients ?

    Merci d'avance et Bon WE !

    Simon

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Peu importe la base de donnée cible, ta question me semble mal formulée.
    Le nombre de client renvoyé jusqu'à atteindre 80% du CA est forcément fonction d'un ordre de lecture ...

    ex:
    si tu appliques un tri croissant sur les CA ... ton nombre de client sera plus important que pour un tri des CA du plus grand au plus petit.


    [...] sauf , si tes clients participent à l'identique au CA de la société.

    @+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Effectivement ma demande n'est peut être pas très claire.
    Sur une base Oracle, j'ai trouvé la synthaxe permettant par exemple de récupérer le top 5 des clients .
    ex : de ma table client & chiffres d'affaire "CA_CLIENT"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from (select * from CA_CLIENT order by Chiffre_Affaires desc) where rownum <=5
    Il y a peut être bcp plus simple mais ça marche.

    Mais ça ne résoud pas mon problème qui est de faire une requête qui me renvoit le nombre minimum de clients dont la somme de leurs chiffres d'affaire est au moins égal à X % du chiffre d'affaires de tous les clients de ma table.

    Somme(CA des clients sélectionnés)>=X*Somme(CA global)
    & le nombre de clients retournés doit être le plus petit possible


    Merci d'avance

    Simon

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Le Rownum peut certainement être utilisé, mais je te propose une autre solution basée sur les fonctions analytiques d'oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select  Nom, CA, Rownum 
    FROM
    (
    	select Nom,CA, sum(CA) OVER(order by CA desc) SommeCumul ,sum(CA) OVER ()*0.8 Total 
    	from nabil.CA_CLIENT 
    ) where SommeCumul <=Total
    Pour obtenir un résultat comme celui-ci par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    NOM                                                        CA     ROWNUM
    -------------------------------------------------- ---------- ----------
    Client7                                                     7000          1
    Client6                                                     6000          2
    Client5                                                     5000          3
    Client4                                                     4000          4
    Comment ça fonctionne :
    1- On fait une somme cumulative des CA avec OVER ... note le tri utilisé (du plus grand au plus petit)...
    On se calcule ensuite ce que represente 80% du CA ( sum(CA) OVER ()*0.8 )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	select Nom,CA, sum(CA) OVER(order by CA desc) SommeCumul ,sum(CA) OVER ()*0.8 Total 
    	from nabil.CA_CLIENT
    2- le reste coule de source ... il n'y a plus qu'à filtré le résultat.

    Le Rownum est ici ajouté pour faire joli mais il ne sert à rien dans ma requête.
    Il te sera utile pour la requête suivante par exemple :
    Parmi les clients qui réalisent 80% du CA je veux les trois plus gros.

    PS: ce n'est qu'une solution ... tu peux certainement le faire avec une autre solution

    @+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci bcp ça marche parfaitement.

    Il me reste plus qu'à créer cette table dans le designer de Business Object et les utilisateurs seront contents !

    Cordialement

    Simon

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

Discussions similaires

  1. Requête qui me pose problème (suite)
    Par Miflon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2013, 19h00
  2. Requête SQL qui pose problème
    Par berko dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/11/2013, 15h02
  3. Requête qui me pose problème
    Par Miflon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2013, 15h02
  4. Réponses: 4
    Dernier message: 10/09/2013, 11h54
  5. Requête SQL qui me bloque
    Par David Guillouet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2004, 15h52

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