2012-03-05 3 views
4

Если бы я хотел найти процент людей из области почтового индекса 12345, я бы взял число людей с этим почтовым индексом и разделил его на общее количество людей ... что Я пропущу в примере ниже? Я не могу понять, как правильно отображать процент. Он просто продолжает говорить 0%.SQL Query: расчет процента

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

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' 
Смежные вопросы