将答案转换为保留两位小数的百分比 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(*))
我想弄清楚如何将“男性百分比”列转换为小数到百分之一的百分比
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(*))