Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/09/2006, 16h58   #1
Invité régulier
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 8
Points : 8
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
dav_e77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2006, 22h03   #2
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
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!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 09h47   #3
Invité régulier
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 8
Points : 8
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
dav_e77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 10h28   #4
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
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
Citation:
select (1::numeric/2)::numeric(1000,1);
avec

numeric(precision,scale)
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 11h45   #5
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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 :
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h10.


 
 
 
 
Partenaires

Hébergement Web