我试图划分2个计数以便返回一个百分比。
以下查询返回0
:
select (
(select COUNT(*) from saxref..AuthCycle
where endOfUse is null and addDate >= '1/1/2014') /
(select COUNT(*) from saxref..AuthCycle
where addDate >= '1/1/2014')
) as Percentage
我应该申请演员吗?
答案 0 :(得分:2)
通过将公共条件移动到where子句可以更简洁地完成:
select sum(case when endOfUse is null then 1 end) * 100.0 / count(*) percentage
from saxref..AuthCycle
where addDate >= '1/1/2014'
请注意,0
的情况也不需要为false,因为sum()
答案 1 :(得分:1)
我会这样做,使用两个sum
s:
select sum
( case
when endOfUse is null and addDate >= '1/1/2014'
then 1
else 0
end
)
* 100.0 -- if you want the usual 0..100 range for percentages
/
sum
( case
when addDate >= '1/1/2014'
then 1
else 0
end
)
percentage
from saxref..AuthCycle
答案 2 :(得分:1)
该问题是由于您正在划分2 int
个值而导致的,默认情况下会输出int
,因为它会使用计算中使用的数据类型来确定输出的数据类型,因此如果你这样做有效:
select 50/100 as result
您将0.5
输出为0
,因为它将其舍入为int
(无小数位)。
但是,如果您指定小数:
select 50.0/100.0 as result
你会得到0.5
作为小数,你可以乘以100得到50%。
因此,更新语法以乘以1.0
并将计数转换为小数将为您提供正确的结果:
select (
(select COUNT(*) from saxref..AuthCycle where endOfUse is null and addDate >= '1/1/2014')*1.0 /
(select COUNT(*) from saxref..AuthCycle where addDate >= '1/1/2014')*1.0
) as Percentage