Ich habe eine Tabelle software
und Spalten darin als dev_cost
, sell_cost
. Wenn dev_cost
ist 16000 und sell_cost
ist 7500.
Wie finde ich die Menge der zu verkaufenden Software, um die wiederherzustellen dev_cost
?
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, oder?
Was wäre die Abfrage dafür? Danke im Voraus.
sql
postgresql
division
modulo
Zeewagon
quelle
quelle
select ceil(16000::numeric/7500)
Antworten:
Ihre Spalten haben Ganzzahltypen, und die Ganzzahldivision schneidet das Ergebnis gegen Null ab . Um ein genaues Ergebnis zu erhalten, müssen Sie mindestens einen der Werte in Gleitkomma- oder Dezimalwerte umwandeln :
select cast(dev_cost as decimal) / sell_cost from software ;
oder nur:
select dev_cost::decimal / sell_cost from software ;
Anschließend können Sie das Ergebnis mit der folgenden
ceil()
Funktion auf die nächste Ganzzahl aufrunden :select ceil(dev_cost::decimal / sell_cost) from software ;
(Siehe Demo zu SQLFiddle .)
quelle
Sie können den Integer-Typ in
numeric
dieceil()
Funktion umwandeln und die gewünschte Ausgabe verwendenSELECT 16000::NUMERIC / 7500 col ,ceil(16000::NUMERIC / 7500)
Ergebnis:
col ceil ------------------ ---- 2.1333333333333333 3
So sollte Ihre Anfrage sein
select ceil(dev_cost::numeric/sell_cost) from software
quelle
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 Stellen nach dem Punkt angeben:
SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
quelle
Diese Abfrage rundet das Ergebnis auf die nächste Ganzzahl
select round(dev_cost ::decimal / sell_cost + 0.5)
quelle
dev_cost
zu einem falschen Ergebnis, wenn es sich um ein ganzzahliges Vielfaches von handeltsell_cost
: siehe Beispiel .