2016-06-30 12 views
0

Ich habe Tabellenspalte wie;Berechnen Sie den Prozentsatz der Spaltendaten in Postgres

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

Daten unter Dokumentspalte gibt den Typ des Dokuments an; für z.B.

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

Ich möchte die Spaltendaten als separate Daten mit Prozentberechnung. mögen;

Grundsätzlich möchte ich Prozentsatz für jeden Datensatz zeigen ...

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

Ich möchte mit ihren Prozentangaben als separate Daten zeigen.

können wir Abfragen in Postgres erstellen, um diese ????

+0

Welche Art ist die Spalte? – klin

+0

sein Texttyp .... –

+0

In Dokumente, ist diese Spaltenstruktur? Bitte erwähnen Sie weitere Informationen. Was Sie genau brauchen? –

Antwort

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

arbeiten für mich ... danke neto –

2

Sie sollten die Strings Arrays konvertieren und UNNEST sie, dann können Sie insgesamt und Prozentsätze berechnen:

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)  
Verwandte Themen