2016-06-30 3 views
0

У меня есть столбец типа;Рассчитать процент данных столбца в postgres

Documents 
------------ 
1 2 3 
1 2 
2 3 
1 
4 5 1 3 

Данные под столбцом документа указывают тип документа; например,

1 indicates passport 
2 indicates School id and so on..... 

Я хочу, чтобы данные столбца были как отдельные данные с процентным вычислением. как;

В основном я хочу, чтобы показать процент для каждого данных ...

Documents  percentage 
    ------------------------- 
    1    10% 
    2    2% 
    3    1% 
    4    25% 
    5    30% 

Я хочу, чтобы показать данные в виде отдельных данных с их процентом.

мы можем построить запрос в postgres, чтобы достичь этого ????

+0

Какой тип является столбец? – klin

+0

его текст типа .... –

+0

В документах, это структура столбцов? Пожалуйста, укажите еще немного информации. Что вам нужно точно? –

ответ

2
with t(s) as (values 
    ('1 2 3'),('1 2'),('2 3'),('1'),('4 5 1 3') 
) 
select distinct s, 
    count(*) over(partition by s) * 100.0/
    count(*) over() as percentage 
from (
    select regexp_split_to_table(s, ' ') as s 
    from t 
) t 
; 
s |  percentage  
---+--------------------- 
5 | 8.3333333333333333 
4 | 8.3333333333333333 
3 | 25.0000000000000000 
1 | 33.3333333333333333 
2 | 25.0000000000000000 
+0

, работающего на меня ... спасибо neto –

2

Вы должны преобразовать строки в массивы и unnest их, то вы можете рассчитать общее количество и процент:

create table test (documents text); 
insert into test values 
('1 2 3'), 
('1 2'), 
('2 3'), 
('1'), 
('4 5 1 3'); 

with docs as (
    select doc 
    from test, unnest(string_to_array(documents, ' ')) doc 
    ), 
total as (
    select count(*) as total 
    from docs 
    ) 
select doc, count(doc), count(doc)* 100/ total as percentage 
from docs, total 
group by doc, total 
order by 1; 

doc | count | percentage 
-----+-------+------------ 
1 |  4 |   33 
2 |  3 |   25 
3 |  3 |   25 
4 |  1 |   8 
5 |  1 |   8 
(5 rows)  
Смежные вопросы