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

PostgreSQL Discussion :

Résultat de division ne garde que la partie entière, comment afficher les décimales


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Résultat de division ne garde que la partie entière, comment afficher les décimales
    Bonjour à tous,

    Je viens tout juste de commencer le SQL sur une base de données Postgres.

    L'une des requêtes que j'ai réalissée effectuait une opération du genre:
    Sum(Champ1)/count(Champ2) avec Champ1 et Champ2 de type Entier.

    Le résultat obtenu lorsque Sum(Champ1)=3 et count(Champ2)=2, soit 3/2 le résultat me donne 1 au lieu de 1,5.

    Comment faire pour avoir les décimales?

    Merci de votre aide



    David

  2. #2
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    j'ai pas de quoi vérifier maintenant, mais :
    Citation Envoyé par dav_e77
    Sum(Champ1)::numeric/count(Champ2)::numeric
    devrait fonctionner.
    Le problème vient du fait que tu divise un entier par un entier, et par défaut, pg te renvoi un entier, qui est donc "coupé". A priori, seule la conversion du dividende est nécessaire.
    ++
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Merci ca marche nickel,

    Par contre, comment spécifier un nombre de décimale car avant j'en avais pas, mais maintenant j'en ai trop

    j'obtiens ce résultat (1.50000000000000000000)

    je sais je sui un peu exigent

    Merci

    David

  4. #4
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    Citation Envoyé par dav_e77
    Merci ca marche nickel,

    Par contre, comment spécifier un nombre de décimale car avant j'en avais pas, mais maintenant j'en ai trop

    j'obtiens ce résultat (1.50000000000000000000)

    je sais je sui un peu exigent

    Merci

    David
    select (1::numeric/2)::numeric(1000,1);
    avec

    numeric(precision,scale)
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  5. #5
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Une alternative au cast explicite consiste à multiplier par 1,0 pour forcer un cast implicite, ce qui rend l'expression un peu plus lisible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select (1.0*3/2)::numeric(5,1)
    Attention, à cause de la prorité égale des opérateurs / et *, la multiplication doit apparaître en début d'expression.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2012, 09h17
  2. Réponses: 5
    Dernier message: 26/05/2009, 10h26
  3. Réponses: 4
    Dernier message: 15/06/2007, 14h58
  4. Réponses: 14
    Dernier message: 28/04/2007, 12h25
  5. Diviser un exe en 2 parties
    Par Hyoga dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 17/10/2005, 12h43

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