2016-06-30 3 views
0

테이블 열과 비슷합니다.포스트그레스에서 열 데이터의 백분율을 계산하십시오.

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

문서 아래의 데이터는 문서 유형을 나타냅니다. 예 :

열 데이터를 백분율 계산으로 별도의 데이터로 원합니다. 처럼;

기본적으로 내가 ... 내가 그들의 비율이 별도의 데이터와 같은 데이터를 표시 할

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

를 각 데이터에 대한 비율을 보여주고 싶어요.

우리는 포스트 그레스에서 쿼리를 작성하여이 문제를 해결할 수 있습니까?

+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)  
관련 문제