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

StackOverflow https://stackoverflow.com/questions/400557

  •  03-07-2019
  •  | 
  •  

質問

SQLでこれを10進数に変換するにはどうすればよいですか?以下は方程式であり、78(整数)として答えが得られますが、実際の答えは78.6(小数あり)であるため、これを表示する必要があります。

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
役に立ちましたか?

解決

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

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

他のヒント

これを試してください:

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

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

100に小数を追加するだけ

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

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

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage


くなくて、より速く、より速く、それを楽しんでください!

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

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

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

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

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

これで試してみてください、ラウンドとstrまたはOver()はありません。これを行う簡単な方法としてこれを見つけました。

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

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

  

e.g。 numeric(5,2)またはnumeric(5,4)

これはあなたの問題を直接解決するものではないかもしれませんが、表示のために数字のセットを丸めると、特別な予防措置を講じない限り、100に追加される数字を取得することは保証されません。たとえば、33.33333、33.33333、および33.33333を丸めると、合計が1つ短くなります。そのため、論理的なことは、セット内の最大値の割合を変更して、差異を考慮することです。

これは、分析関数とサブクエリファクタリング(WITH)句を使用してサンプルデータを生成するOracle SQLでこれを行う方法です。

with data as (select 25 num from dual union all
              select 25     from dual union all
              select 25     from dual)
select num, 
case
   when rnk = 1
   then 100 - sum(pct) over (order by rnk desc
                             rows between unbounded preceding
                                      and         1 preceding)
   else pct
end pct
from
   (
   select num,
          round(100*ratio_to_report(num) over ()) pct,
          row_number() over (order by num desc) rnk
   from data
   )
/


NUM                    PCT                    
---------------------- ---------------------- 
25                     33                    
25                     33                     
25                     34                     

msアクセスでは、SQL関数ROUND(number、number of decimals)を使用できます。指定された小数点以下の桁数に数値を丸めます:

ROUND((100 * [TotalVisit1] / [TotalVisits])、1)AS Visit1percent

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top