我正在尝试找出如何将“男性百分比”列转换为带有小数到百分之一的百分数
select Top 20 pa.State,
Sum(case when p.gender='M' then 1 else 0 end) as [Male Count],
Sum(case when p.gender='F' then 1 else 0 end) as [ Female Count],
100*sum(case when gender='m' then 1 else 0 end )/count(*) as [Male Percentage]
From [dbo].[Patients] as p
Join PatientAddresses as pa
on p.mrn=pa.MRN
group by pa.State
我得到的结果。
State Male Count Female Count Male Percentage
UT 105 120 46
NC 1152 1123 50
WI 700 669 51
MA 1486 1424 51
默认情况下,SQL Server将报告整数除法为整数。如果要强制两位小数,请使用ROUND(x, 2)
,其中x
是浮点数。使x
成为浮点数的一种方法是将百分比乘以浮点数100.0
而不是整数100
。
SELECT TOP 20
pa.State,
COUNT(CASE WHEN p.gender = 'M' THEN 1 END) AS [Male Count],
COUNT(CASE WHEN p.gender = 'F' THEN 1 END) AS [Female Count],
ROUND(100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*), 2) AS [Male Percentage]
FROM [dbo].[Patients] AS p
INNER JOIN PatientAddresses AS pa
ON p.mrn = pa.MRN
GROUP BY
pa.State;
旁注:在没有 编辑: viewTOP
的情况下使用ORDER BY
并没有多大意义,因为尚不清楚要查看的20条记录。因此,在这里添加ORDER BY
子句可能是您想要的,除非您可以返回20个随机状态。CONVERT
:CONVERT(DECIMAL(10,2), 100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*))