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 :

Calculs de pourcentages en SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut Calculs de pourcentages en SQL
    Bonjour,

    je dispose d'une BDD SQL contenant une des clients qui sont répartis en 2 catégories (ex. : secteur public et secteur privé).

    je souhaiterais, via une requête sql, obtenir directement le pourcentage de clients appartenant à chaque catégorie sur le nombre total de clients..

    j'ai essayé avec plusieurs sous-requêtes mais impossible de faire des opérations, de même que si je fais des opérations entre 2 "SELECT COUNT", ça me renvoie "0"...

    je dois donc mal m'y prendre, pourriez-vous SVP me donner quelques tuoyaux pour démêler mon problème ?

    merci d'avance

    Chris

  2. #2
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonsoir,

    Pour être précis il faudrait voir la structure de votre table et les données, mais ça pourrait ressembler à ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT secteur, 
           Count(*)/(SELECT Count(*) FROM client)*100 AS pourcSecteur
    FROM client
    GROUP BY secteur

  3. #3
    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
    Pas bon car les divisions en nombre entiers donnerons soit 1 soit 0.
    Il faut trantsyper les entiers du comptage en réel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT secteur, 
           CAST(Count(*) AS FLOAT) 
           / CAST((SELECT Count(*) 
                   FROM client) AS FLOAT) * 100.0 AS pourcSecteur
    FROM   client
    GROUP  BY secteur
    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/ * * * * *

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponse, en effet la solution résidait bien dans la conversion de type, car à présent ça marche voici ma requête, qui me renvoie le nombre de clients du secteur privé, l ceux du secteur public, le total et enfin mon ratio....

    Pouvez-vous, s'il vous plait, juste me dire si elle est correcte ou si il y a plus "académique".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT DISTINCT
     
    Clients_PRIVE = (SELECT count(n_client) FROM CLIENTS WHERE categorie like 'Pr'),
    Clients_PUBLIC = (SELECT count(n_client) FROM CLIENTS WHERE categorie like 'Pu'),
    Clients_TOTAL = (SELECT count(n_client) FROM CLIENTS ),
    POURCENTAGE_Pr = ((SELECT CAST(count(n_client) AS FLOAT) FROM CLIENTS WHERE categorie like 'Pr')/(SELECT CAST(count(n_client) AS FLOAT) FROM CLIENTS )*100)
     
    FROM CLIENTS where YEAR(Date_create) =2009
    Merci d'avance

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par grping Voir le message
    Pouvez-vous, s'il vous plait, juste me dire si elle est correcte ou si il y a plus "académique".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT
     
    Clients_PRIVE = ...
    Euh... quel SGBD a cette syntaxe non normative ?
    Le plus académique, c'est ce qui vous a été proposé. Votre requête est beaucoup plus compliquée et mettra probablement plus de temps à s'exécuter s'il y a beaucoup de lignes à sonder.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    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
    L'utilisation de LIKE sans joker est idiote.
    La filtre sur l'année 2009 est mal placé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH 
    T1 AS
    (SELECT count(n_client) AS N, categorie 
     FROM   CLIENTS
     WHERE  YEAR(Date_create) =2009
     GROUP  BY categorie)
    SELECT (SELECT N FROM T1 WHERE categorie  = 'Pr') AS Clients_PRIVE,
           (SELECT N FROM T1 WHERE categorie  = 'Pu') AS Clients_PUBLIC,
           (SELECT SUM(N) FROM T1)                    AS Clients_TOTAL,
           CAST((SELECT N FROM T1 WHERE categorie  = 'Pr') AS FLOAT)
           / CAST((SELECT SUM(N) FROM T1) AS FLOAT) AS POURCENTAGE_Pr 
    -- FROM DUAL
    FROM DUAL n'est pas nécessaire si pas sous Oracle.

    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/ * * * * *

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 32
    Par défaut
    Bonjour,

    J'utilise cette syntaxe sur du SQL-Server... En fait c'est surtout pour le côté pratique que j'utilise la syntaxe du type "EXPRESSION =" plutôt que "AS EXPRESSION", pour moi le résultat était le même

    Je vais donc corriger ma requête en ce sens.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT DISTINCT
     
    ANNEE = YEAR(AFF.Date_create),
    ((SELECT CAST(COUNT(N_AFFAIRE) AS FLOAT) FROM AFFAIRE WHERE champ2 like 'Pr')/(SELECT CAST(COUNT(N_AFFAIRE) AS FLOAT) FROM AFFAIRE)*100)AS SECTEUR_PRIVE,
    ((SELECT CAST(COUNT(N_AFFAIRE) AS FLOAT) FROM AFFAIRE WHERE champ2 like 'Pu')/(SELECT CAST(COUNT(N_AFFAIRE) AS FLOAT) FROM AFFAIRE)*100) AS SECTEUR_PUBLIC
     
    FROM affaire AFF where YEAR(AFF.Date_create) > 2005  GROUP BY AFF.Date_create
    En revanche, petite question subsidiaire, j'aimerais regrouper les résultats par un autre critère ex(l'année de création du client) afin d'obtenir (par exemple) le résultat suivant :

    ANNEE | Pourc_Public | Pourc_Prive
    2009 | 80 | 20
    2008 | 70 | 30
    ...

    J'ai essayé d'ajouter un simple GROUP BY mais j'obtiens les mêmes pourcentage pour chaque année...

    Merci

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

Discussions similaires

  1. Demande d'aide pour un calcul de pourcentage en SQL
    Par Léo1000 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/04/2014, 21h45
  2. Calcul d'un pourcentage en SQL
    Par nono64600 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 01/03/2009, 16h54
  3. Calcul ou Stockage en SQL ?
    Par webof dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/03/2005, 18h42
  4. Calcul Matriciel en PL/SQL
    Par PpPool dans le forum PL/SQL
    Réponses: 4
    Dernier message: 02/02/2004, 10h11
  5. Calcul de pourcentage
    Par megazen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/11/2003, 16h43

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