webentwicklung-frage-antwort-db.com.de

Division (/) gibt meine Antwort nicht in postgresql

Ich habe eine Tabelle software und Spalten als dev_cost, sell_cost darin. Wenn dev_cost 16000 und sell_cost 7500 ist.

Wie finde ich die Menge an Software, die verkauft werden muss, um den dev_cost wiederherzustellen? 

Ich habe wie folgt abgefragt:

select dev_cost / sell_cost from software ;

Es gibt 2 als Antwort zurück. Aber wir müssen 3 bekommen, richtig?

Was wäre die Frage dafür? Danke im Voraus.

27
zeewagon

Ihre Spalten haben ganzzahlige Typen, und die Division Ganzzahl schneidet das Ergebnis gegen Null ab . Um ein genaues Ergebnis zu erhalten, müssen Sie mindestens einen der Werte in Float oder Dezimal umwandeln :

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

oder nur:

select dev_cost::decimal / sell_cost from software ;

Sie können das Ergebnis dann mit der Funktion ceil() auf die nächste Ganzzahl aufrunden:

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

(Siehe Demo zu SQLFiddle .)

43
Ilmari Karonen

Sie können einen Ganzzahl-Typ in numeric umwandeln und die Funktion ceil() verwenden, um die gewünschte Ausgabe zu erhalten

Die PostgreSQL ceil-Funktion gibt den kleinsten ganzzahligen Wert zurück, der ist größer oder gleich einer Zahl.

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

Ergebnis:

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

Deine Frage sollte also sein

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

Sie können Ihre Variable auch in den gewünschten Typ umwandeln und dann die Division anwenden:

 SELECT (dev_cost::numeric/sell_cost::numeric);

Sie können Ihren Wert runden und die Anzahl der Nachkommastellen angeben:

SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
1
AdagioDev

Diese Abfrage rundet das Ergebnis auf die nächste Ganzzahl 

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