Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probléme de jointure et d'opérateur

Sujet résolu
Anonyme
    26 novembre 2011 à 15:51:08

    Bonjour,

    J'ai une base de donnée avec des clients. Ces clients appartiennent à un type (Particulier, commerçant ...).
    Je veux afficher une répartition des clients (en pourcentage) par type de client.
    Voici ce que j'ai fait, j'obtient le nombre de client par type.
    SELECT lib_type, count(*)::numeric(5,2)
    FROM CLIENT, TYPE
    WHERE type.code_type=client.code_type_cli
    GROUP BY lib_type
    

    Maintenant, il faut que j'arrive à récupérer le nombre de clients pour ensuite, dans le select faire un count(*)::numeric(5,2)/nb_client_total*100
    Cependant, je ne sais pas comment indiquer à PostgreSQL les donnée dont j'ai besoin.
    De plus je sais que l'on peut le faire sans sous-requête. Je pense qu'il faudrait utiliser les jointures externes, mais je ne sais pas bien m'en servir.
    Merci à ceux qui sauront m'aider :)
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2011 à 18:39:16

      Quel est l'intérêt d'utiliser un NUMERIC ?

      Sinon, tu peux mettre un "window aggregate" pour ton pourcentage :

      SELECT lib_type, 
      count(*) as nombre, 
      sum(count(*)) over () as total
      
      FROM client JOIN type ON (type.code_type = client.code_type_cli)
      GROUP BY lib_type
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 novembre 2011 à 15:06:16

        Merci pour ta réponse, le numéric c'est pour avoir un nombre avec 2 chiffres après la virgule, mais je n'arrive pas l'utiliser, donc je l'ai remplacé par un round.
        Ce qu'il me manqué c'est la fonction over. Elle répond à mon problème, mais tu peux m'expliquer comment elle fonctionne ? Car je ne trouve rien la dessus. Merci.
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2011 à 16:11:21

          > le numéric c'est pour avoir un nombre avec 2 chiffres après la virgule

          Comme le count(*) renvoie un entier, ça ne sert à rien.

          Pour le pourcentage, tu peux mettre :

          (100 * count(*) / sum(count(*)) over ())::NUMERIC(5,2) as percent

          doc :

          http://www.postgresql.org/docs/9.1/sta [...] l-window.html et le lien "more details" à la fin.
          • Partager sur Facebook
          • Partager sur Twitter

          Probléme de jointure et d'opérateur

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown