如何在SQL中计算带小数的百分比?

时间:2008-12-30 15:29:28

标签: sql decimal sum

如何在SQL中将其转换为小数?下面是等式,我得到答案为78(整数),但真正的答案是78.6(带小数)所以我需要显示这个,否则报告不会达到100%

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

11 个答案:

答案 0 :(得分:19)

试试这个:

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

答案 1 :(得分:8)

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

丑陋,但确实有效。

答案 2 :(得分:1)

至少在MySQL中(如果它有帮助),如果你想使用浮点数,你必须使用类型浮点字段,而不是常规的int字段。

答案 3 :(得分:1)

只需在100

中添加小数
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

这会强制所有处理都在浮点数中发生...如果你想将最终输出作为文本,并截断显示只有一个小数位,请使用Str函数

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

答案 4 :(得分:1)

subdomain


不丑,工作得更好,更快,享受它!

答案 5 :(得分:1)

这对我来说非常合适:

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

希望它可以帮助世界上某人。

答案 6 :(得分:0)

执行此操作可能有些过分,但您可能希望考虑将所有值投射到浮点数以确保所有阶段的准确性。

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

注意,对于TotalVisits == 0的情况,你真的需要把代码放在这里,否则你会得到除以0的答案。

答案 7 :(得分:0)

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

这将返回一个小数,ROUND将其舍入为一位数。所以在你的情况下你会得到76.6。如果您不想要任何数字,请将1更改为0,如果您想要两位数,请将其更改为2.

答案 8 :(得分:0)

试试这个,没有round和str或Over()。我发现这是一种更简单的方法。

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

您可以根据需要更改小数点数

  

e.g。数字(5,2)或数字(5,4)

答案 9 :(得分:-1)

这可能无法直接解决您的问题,但是当您围绕一组数字进行显示时,除非您采取特殊预防措施,否则您无法保证获得的数字会增加到100。例如,舍入33.33333,33.33333和33.33333将在总和上留下一个简称,因此合乎逻辑的做法是修改集合中最大值的百分比以考虑任何差异。

这是在Oracle SQL中使用分析函数和子查询因子(WITH)子句生成样本数据的方法。

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                     

答案 10 :(得分:-1)

在ms访问中您可以使用SQL函数ROUND(数字,小数位数),它将数字四舍五入到给定的小数位数:

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