2012-03-05 193 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'