SQL查询:计算百分比

5
如果我想查找邮政编码为12345的人口百分比,我需要将该邮政编码的人数除以总人数...但是在下面的示例查询中缺少什么?我无法弄清楚如何正确显示百分比。它只会保持在0%。
select (count(P.PERSON_ID) / (select count(*) from PERSON P)) * 100.00
as12345 Zip Code Percentage”
from PERSON P
where P.ZIP = '12345'

谢谢你。

感谢您。

6个回答

13

您正在将一个整数除以另一个更大的整数。结果总是为零。相反,在除法之前,将第一个计数乘以100.0 可以得到百分比。这将把第一个计数转换成一个浮点数,当它与一个整数进行除法时,将会得到一个浮点数,从而得到所需的百分比。


哇...我感觉有点傻。那很有道理,而且它有效。至少这是一个简单的错误和修复 :) 非常感谢。 - Holly

2

您正在进行整数除法。如果结果小于1,则始终显示0 * 100.00,因此始终为0。如果您想要准确的百分比,需要将其中一个变量转换为浮点数。

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

2

如果您想选择小数点后的位数,您可以使用以下方式结合ROUND()函数:

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

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

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
    as12345 Zip Code Percentage”
    from PERSON P
    where P.ZIP = '12345'

0
select AVG(CASE WHEN ZIP = '12345' 
           THEN 1 ELSE 0 
           END) * 100.00 as12345 Zip Code Percentage”
from PERSON P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接