percentage - 将答案转换为带两位小数的百分比 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
我得到的结果。
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;
旁注:使用TOP
withoutORDER BY
没有多大意义,因为不清楚您想查看哪20 条记录。因此,ORDER BY
在这里添加一个子句可能是您想要的,除非您可以返回 20 个随机状态。
编辑:
如果您想在 SSMS 中查看只有两位小数的输出,而不仅仅是两位小数的精度,请使用CONVERT
:
CONVERT(DECIMAL(10,2), 100.0*COUNT(CASE WHEN gender = 'm' THEN 1 END) / COUNT(*))
推荐阅读
- ansible - Ansible-Playbook 运行自定义 group_vars
- sql - AnalysisException:第 1 行中的语法错误:在 Impala 中使用 abs() 取模时出错
- amazon-web-services - 如何在 AWS 中将 PySpark 作业创建为 Web 服务
- excel - 在下一个空行中复制并粘贴一组范围_LOOP
- reactjs - Next.js 与 Redux 和 Firebase 身份验证
- angular - Angular 7 的 EventSource 问题
- c# - 无法登录 Microsoft 帐户
- c# - 来自不同类的 C# 单个列表
- java - 在jsp文件中用jsp表达式打印对象的属性
- go - acme autocert manager 在启动时忽略有效证书