数学的には、これらの結果は似ています。私はそれらの動作に興味があります。ローカル変数がfloatとして宣言されている最初のバージョンでは、丸め関数は小数点以下2桁目に表示される小数点を停止します。ローカル変数がintとして宣言されている2番目のバージョンでは、round
関数は小数点以下2桁に丸めてから、ゼロの束を追加します。変数タイプによってround
関数の動作が異なるのはなぜですか?
declare @totalpop float
set @totalpop = (select count(distinct patid) from members)
select @totalpop
select edutext
,COUNT(*) as educationCounts
,round(100.0*COUNT(*)/@totalpop,2)
from
(
select distinct m.patid, e.eduText
from members as m
inner join EducationTable as e on e.eduID = m.education
)x
group by x.eduText
-小数点以下第2位は四捨五入されません
declare @totalpop int
set @totalpop = (select count(distinct patid) from members)
select @totalpop
select edutext
,COUNT(*) as educationCounts
,round(100.0*COUNT(*)/@totalpop,2)
from
(
select distinct m.patid, e.eduText
from members as m
inner join EducationTable as e on e.eduID = m.education
)x
group by x.eduText