我有一个表有两列id和数据。表中的值如下:
id|data|
1 |A,B |
2 |B,C |
3 |C,D |
4 |D,A |
5 |E,C |
我需要表中的A,B,C,D,E数量如下。请注意:列是动态的,意味着它们取决于表中数据列中的值:
A|B|C|D|E|
2|2|3|2|1|
我写了以下查询:
SELECT id,s.data
FROM my_table t,
unnest(string_to_array(t.data, ',')) s(data);
输出如下:
id|data|
1 | A |
1 | A |
1 | A |
1 | A |
1 | A |
1 | A |
1 | A |
1 | A |
答案 0 :(得分:0)
请找到提供您想要的确切输出的查询。
select * from crosstab ('SELECT ''Total'':: text, s.data, count(*)::int
FROM my_table t, unnest(string_to_array(t.data, '','')) s(data)
group by s.data') as ct(Total text, A int, B int, C int, D int, E int)
请创建扩展tablefunc(如果未创建)。