テーブルsoftware
と、dev_cost
、sell_cost
の列があります。 dev_cost
が16000でsell_cost
が7500の場合。
dev_cost
を回復するために販売するソフトウェアの量を見つけるにはどうすればよいですか?
私は以下のように質問しました:
select dev_cost / sell_cost from software ;
答えとして2を返しています。しかし、3を取得する必要がありますよね?
そのためのクエリは何でしょうか?前もって感謝します。
列には整数型があり、- 整数除算は結果をゼロに切り捨てます 。正確な結果を得るには、 少なくとも1つの値を浮動小数点または小数にキャスト する必要があります。
select cast(dev_cost as decimal) / sell_cost from software ;
あるいは単に:
select dev_cost::decimal / sell_cost from software ;
その後、ceil()
関数を使用して、結果を最も近い整数に切り上げることができます。
select ceil(dev_cost::decimal / sell_cost) from software ;
( SQLFiddleのデモ を参照してください。)
整数型をnumeric
にキャストし、 ceil()
関数を使用して目的の出力を取得できます
PostgreSQL ceil関数は、数値以上の最小の整数値を返します。
SELECT 16000::NUMERIC / 7500 col
,ceil(16000::NUMERIC / 7500)
結果:
col ceil
------------------ ----
2.1333333333333333 3
したがって、クエリは
select ceil(dev_cost::numeric/sell_cost)
from software
変数を目的の型にキャストしてから、除算を適用することもできます。
SELECT (dev_cost::numeric/sell_cost::numeric);
値を丸めて、ポイントの後の桁数を指定できます。
SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
このクエリは結果を次の整数に丸めます
select round(dev_cost ::decimal / sell_cost + 0.5)