web-dev-qa-db-fra.com

Division (/) ne pas donner ma réponse postgresql

J'ai une table software et des colonnes en tant que dev_cost, sell_cost. Si dev_cost est 16000 et sell_cost est 7500.

Comment trouver la quantité de logiciels à vendre pour récupérer le dev_cost

J'ai demandé comme ci-dessous:

select dev_cost / sell_cost from software ;

Il retourne 2 comme réponse. Mais nous devons obtenir 3, non?

Quelle serait la requête pour cela? Merci d'avance.

27
zeewagon

Vos colonnes ont des types entiers et la division entier tronque le résultat vers zéro . Pour obtenir un résultat précis, vous devez convertir au moins une des valeurs en flottant ou décimal :

select cast(dev_cost as decimal) / sell_cost from software ;

ou juste:

select dev_cost::decimal / sell_cost from software ;

Vous pouvez ensuite arrondir le résultat au nombre entier le plus proche à l'aide de la fonction ceil():

select ceil(dev_cost::decimal / sell_cost) from software ;

(Voir démo sur SQLFiddle .)

43
Ilmari Karonen

Vous pouvez convertir le type entier en numeric et utiliser ceil() function pour obtenir le résultat souhaité.

La fonction ceil de PostgreSQL renvoie la plus petite valeur entière que est supérieur ou égal à un nombre.

SELECT 16000::NUMERIC / 7500 col 
      ,ceil(16000::NUMERIC / 7500) 

Résultat:

col                  ceil 
------------------   ---- 
2.1333333333333333     3    

Donc, votre requête devrait être

select ceil(dev_cost::numeric/sell_cost) 
from software
3
Vivek S.

Cette requête arrondira le résultat au prochain entier 

select round(dev_cost ::decimal / sell_cost + 0.5)
0
Abylay Sabirgaliyev