将答案转换为保留两位小数的百分比 SQL

Convert answer to percentage with two decimals place SQL

我想弄清楚如何将“男性百分比”列转换为小数到百分之一的百分比

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

我得到的结果。

男性人数 女数 男性比例
UT 105 120 46
NC 1152 1123 50
WI 700 669 51
均线 1486 1424 51

SQL 服务器默认将整数除法报告为整数。如果要强制保留两位小数,请使用 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;

旁注:使用 TOP 而不使用 ORDER BY 没有多大意义,因为不清楚 20 条记录你想看。因此,在这里添加一个 ORDER BY 子句可能是您想要的,除非您可以返回 20 个随机状态。

编辑:

如果您想查看 SSMS 中的输出只有两位小数,而不仅仅是两位小数的精度,那么使用CONVERT:

CONVERT(DECIMAL(10,2), 100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*))