1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mars 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mars 2015
    Messages : 24
    Points : 21
    Points
    21

    Par défaut SQL et pourcentage en 1 et 1 seule ligne

    Bonjour, bonjour,

    Une simple question qui me retourne le cerveau depuis cet après midi et qui va surement me pourrir la nuit
    La question est la suivante : comment en 1 requête calculer le nombre d'occurence d'une valeur et donner le pourcentage d'occupation en 1 ligne?
    Pour l'exemple j'ai des services dans ma table TEST, normale :

    SERVICE ...    ... 
    Compta
    Finance
    Compta
    Treso
    Je veux obtenir le résultat suivant en 1 requête !!!!
    SERVICE  ____Nb____%
    Compta          ______2 ___0.5
    Finance           ______1____0.25
    Treso             _______1 ____0.25

    J'ai fais un GROUP BY tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SERVICE, count(SERVICE) as "NB", count(SERVICE)/(select count(*) from TEST)  as "%" 
    FROM TEST GROUP BY SERVICE
    et j'obtiens
    SERVICE ______   NB _  %
    Compta_________2__    0
    Finance ________1__    0
    Treso  _________ 1__    0
    Si vous avez une idée , suis preneur
    Je continue et si je trouve le grâle je vous fais un retour, peut être une fonction récursive ?

    Je repasse demain car je ne bosse pas la nuit, et puis désolé pour ceux à qui je vais la pourrir !

  2. #2
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2006
    Messages
    866
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : octobre 2006
    Messages : 866
    Points : 1 793
    Points
    1 793

    Par défaut

    a mon avis, le % que tu obtiens est en INTEGER; sans chiffre après la virgule.

    peut-être qu'en mettant le calcul dans une fonction DEC arrangerait les choses.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 310
    Points : 22 079
    Points
    22 079

    Par défaut

    Premièrement, pour obtenir un pourcentage il faut multiplier le rapport de la partie au total par 100.
    Ensuite, si tu souhaites des décimales, il faut que l'un des opérandes comporte des décimales.
    Comme l'a justement fait remarquer bernard59139, les comptes sont des entiers.
    Il suffirait donc de multiplier le rapport par 100.00 pour obtenir un résultat avec deux décimales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 	SERVICE
    	, 	count(SERVICE) as "NB"
    	, 	100.00 * count(SERVICE) / (select count(*) from TEST)  as "%"
    from 	TEST
    group by SERVICE
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mars 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mars 2015
    Messages : 24
    Points : 21
    Points
    21

    Par défaut J'ai perdu mes décimales!!!

    C'est bon le schimiliblick avance!
    Merci pour al1_24 pour sa remarque de calcul, se qui a nettement amélioré les résultats par contre y a un truc avec la fonction DEC que bernard59139 pourra peut être éclairer.

    Ma requête est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    ZLDSCN as service,count(zldscn) as Nb , decimal(100*count(zldscn)/(select count(*) from ZDESCD00), 5, 2) as "%" ,
    (select count(*) from zdescd00)  as "Nb de ligne totale"      
    FROM ZDESCD00 
    GROUP BY ZLDSCN
    et le résultat ci-dessous tan,tan !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     SERVICE                                    NB         "%"   "Nb de ligne totale"
     X_TB_ITEM                                   4        ,000                421   
     APPROS004                                  15       3,000                421   
     MOVE_WHSL                                   5       1,000                421   
     HIECLIENT                                  49      11,000                421

    La question est pourquoi je n'ai pas les décimales ? par exemple pour HIECLIENT 49/421 x 100 = 11.63 et la j'ai 11,00
    WTF!

    C'est sans doute une syntaxe mal appropriée ou une perte de neurone totale sans virgule !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 310
    Points : 22 079
    Points
    22 079

    Par défaut

    As-tu essayé en multipliant par 100.00 comme je le proposais ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mars 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mars 2015
    Messages : 24
    Points : 21
    Points
    21

    Par défaut Gagné!

    Bravo, Well done, muchas gracias....
    Les arcanes du SQL sont obscures, 100.00 en lieu et place de 100 donne effectivement les décimales.
    Je dormirai mieux ce soir.
    Merci a toi oh! al1_24.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 310
    Points : 22 079
    Points
    22 079

    Par défaut

    Citation Envoyé par totofff78 Voir le message
    Les arcanes du SQL sont obscures
    Rien d'obscur : le résultat d'une opération arithmétique est du même type que le plus détaillé de ses opérandes.
    Si tu divises un entier par un entier, tu obtiens... un entier.
    Si tu multiplies un entier par un décimal, tu obtiens... un décimal.
    Si tu divises un décimal par un entier, tu obtiens... un décimal.

    Si tu veux caster un entier en décimal(?, 3), il suffit de le multiplier par 1.000
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mars 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mars 2015
    Messages : 24
    Points : 21
    Points
    21

    Par défaut

    Comme cela c'est bcp plus claire.
    Appliquer sans comprendre n'est que ruine de l'âme (J'ai fais philosophe en 2ième option)
    Merci encore,

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

Discussions similaires

  1. req. SQL avec pourcentage
    Par maxine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/06/2009, 16h47
  2. [SQL] Résultats d'une requête en une seule ligne
    Par nadsky dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/08/2008, 11h07
  3. [CONCOURS] - SQL : écriture de requêtes
    Par orafrance dans le forum Langage SQL
    Réponses: 0
    Dernier message: 14/01/2008, 09h34
  4. SQL - ORACLE : Extraction Nom Colonnes sur 1 seule ligne
    Par Mimile28 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/09/2007, 15h01

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