web-dev-qa-db-ja.com

SQLで小数を使用してパーセンテージを計算するにはどうすればよいですか?

これをSQLで小数に変換するにはどうすればよいですか?以下は方程式で、答えは78(整数)ですが、実際の答えは78.6(10進数)なので、これを表示する必要があります。そうしないと、レポートが100%まで集計されません。

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
13
elphj
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent

醜いですが、動作します。

8
Shawn

これを試して:

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
19
LeppyR64
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage


醜くなく、より良く、より速く動作します、楽しんでください!

1
Ali

少なくともMySQLでは(役立つ場合)、float数値を使用する場合は、通常のintフィールドではなく、float型フィールドを使用する必要がありました。

1
Ólafur Waage

100に小数を追加するだけです

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

これにより、すべての処理がfloatで実行されます...最終出力をテキストとして表示し、小数点以下1桁まで表示するために切り捨てる場合は、Str関数を使用します。

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
1
Charles Bretana

これは私にとって完璧に機能します:

CAST((1.0 * SUM(ColumnA) /COUNT(ColumnB)) as decimal(5,2))

それが世界中の誰かに役立つことを願っています。

0
Goku

これを試してみてください。roundとstrまたはOver()は使用しないでください。私はこれをより簡単な方法として見つけました。

cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3))  as [Visit1percent]

必要に応じて小数点数を変更できます

例えば数値(5,2)または数値(5,4)

0
Zameer Fouzan

これを行うのはおそらくやり過ぎですが、すべてのフェーズで精度を確保するために、すべての値を浮動小数点数にキャストすることを検討することをお勧めします。

(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent

TotalVisits == 0の場合は、ここにコードを入力する必要があります。そうしないと、0で除算されます。

0
Kent Fredric
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'

これは小数を返し、ROUNDはそれを1桁に丸めます。したがって、あなたの場合、76.6を取得します。数字が必要ない場合は1を0に変更し、2桁が必要な場合は2に変更します。

0
JoBaxter