2012-03-05 160 views
4

如果我想查找来自12345邮政编码区域的人员的百分比,我会将该邮编的人数从总人数中划分出来......这是什么我在下面的示例查询中缺少?我无法弄清楚如何正确显示百分比。它只是说0%。SQL查询:计算百分比

select (count(P.PERSON_ID)/(select count(*) from PERSON P)) * 100.00 
as “12345 Zip Code Percentage” 
from PERSON P 
where P.ZIP = '12345' 

谢谢。

回答

11

您将整数除以较大的整数。结果总是为零。相反,在分部之前,将第一个计数乘以100.0 。这将第一个计数转换为一个浮点数,除以整数后,浮点数将给出一个浮点数,从而提供您需要的百分比。

+0

哇...我觉得有点傻。这是有道理的,它的工作原理。至少这是一个简单的错误,并修复:)非常感谢你。 – Holly 2012-03-05 18:56:42

0

试试这个:

SELECT (P.SubSet * 100.00)/p.Total AS "12345 Zip Code Percentage" 
    FROM (
     SELECT COUNT(CASE WHEN ZIP = '12345' THEN 1 ELSE 0 END) Subset, 
       COUNT(*) Total 
      FROM PERSON 
     ) P 
2

你做的整数除法。如果结果低于1,它将始终显示0 * 100.00,因此始终为0.如果您想要精确的百分比,则需要将其中一个变量作为浮点数来投射。

select (count(P.PERSON_ID)/CAST ((select count(*) from PERSON P) As Float)) * 100.00 
as “12345 Zip Code Percentage” 
from PERSON P 
where P.ZIP = '12345' 
0

试试这个,我添加了额外的条件由0误差,避免鸿沟:

select 
    CASE 
    WHEN (select count(*) from PERSON P) > 0 THEN (CAST(count(P.PERSON_ID) As Decimal)/CAST((select count(*) from PERSON P)As Decimal)) * 100.00 
    ELSE 0 END 
    as “12345 Zip Code Percentage” 
    from PERSON P 
    where P.ZIP = '12345' 
1

如果你想选择你也可以纳入ROUND()如下的小数点后的数字:

,ROUND(CAST(COUNT(var1) AS FLOAT)/COUNT(var2),[# decimals]) AS 'mypercentage'