2015-12-22 4 views
1

У меня есть таблица, как это, например:расчете процента в PostgreSql

string adm 
A  2 
A  1 
B  2 
A  1 
C  1 
A  2 

И через запрос SQL я хочу что-то вроде этого:

string perc_adm (%) 
A   50 
B   100 
C   0 

Я хочу процент появления номер 2 в каждая строка. Я могу получить это в отдельных условиях, но мне нужно только одно условие. Также у меня есть некоторая деленная на нулевую ошибку. Как исправить это в состоянии?

+0

вы реализовать свои процентные суммы до 150% в вашем примере. Согласно вашему делу, если вы должны A, 66,66% и B, 33,33%. – Rahul

+0

Пожалуйста, добавьте свой код на вопрос –

+0

Извините, но мой код верен. Я хочу, чтобы процент числа 2 встречался в каждой строке. Существует 4 строки A и два из них имеют номер 2, поэтому процент составляет 50%. Существует одна строка B со значением 2, поэтому нахождение составляет 100%. –

ответ

1

Try:

select 
    string, 
    (cnt_2/total::float)*100 perc_adm 
from (
    select 
     string, 
     count(*) total, 
     sum(case when adm = 2 then 1 else 0 end) cnt_2 
    from tbl 
    group by string 
) x 
order by string 

Здесь total::float преобразовать дивизию в значение float, иначе int/int ==>int.

sql fiddle demo

+0

Отлично !!! Эта работа!!! Спасибо. –

Смежные вопросы