web-dev-qa-db-ja.com

部門(/)がpostgresqlで答えを出さない

テーブルsoftwareと、dev_costsell_costの列があります。 dev_costが16000でsell_costが7500の場合。

dev_costを回復するために販売するソフトウェアの量を見つけるにはどうすればよいですか?

私は以下のように質問しました:

select dev_cost / sell_cost from software ;

答えとして2を返しています。しかし、3を取得する必要がありますよね?

そのためのクエリは何でしょうか?前もって感謝します。

43
zeewagon

列には整数型があり、- 整数除算は結果をゼロに切り捨てます 。正確な結果を得るには、 少なくとも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のデモ を参照してください。)

67
Ilmari Karonen

整数型を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
4
Vivek S.

変数を目的の型にキャストしてから、除算を適用することもできます。

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

値を丸めて、ポイントの後の桁数を指定できます。

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

このクエリは結果を次の整数に丸めます

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