SQL查询:计算百分比

时间:2012-03-05 18:47:40

标签: sql

如果我想找到来自邮编区域12345的人的百分比,我会将拥有该邮政编码的人数除以总人数...我在示例中缺少的是什么查询下面?我无法弄清楚如何正确显示百分比。它只是说0%。

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

谢谢。

6 个答案:

答案 0 :(得分:11)

您将整数除以更大的整数。结果总是为零。相反,在除法之前将第一个计数乘以100.0 。这将第一个计数转换为浮点数,当除以整数时,它将给出一个浮点数,从而得到你需要的百分比。

答案 1 :(得分: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'

答案 2 :(得分:1)

如果您想选择小数点数,您还可以合并ROUND(),如下所示:

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

答案 3 :(得分: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

答案 4 :(得分: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'

答案 5 :(得分:0)

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