如何在SQL中将JSON值扁平化为频率计数



我有一个列的JSON值如下:

{'A': 'true', 'B': 'false', 'C': 'true'}
{'A': 'true', 'C': 'false'}
{'D': 'true'}
{'C': 'true', 'A': 'false'}

我想创建一个SQL查询,它统计json中每个键值组合的条目数。

请注意,键和值是预先未知的。

所以上面的输出是:

2   A=true
1   A=false
1   B=false
2   C=true
1   C=false
1   D=true

我该怎么做?

SELECT a1||':'||a2, count(*) from (
SELECT map_entries(cast(json_parse(x) as MAP<VARCHAR, VARCHAR>)) row from 
(VALUES ('{"A": "true", "B": "false", "C": "true"}'), ('{"A": "true", "C": "false"}'), ('{"D": "true"}'), ('{"C": "true", "A": "false"}')) as t(x)) 
as nested_data CROSS JOIN UNNEST(row) as nested_data(a1, a2) 
group by 1;
_col0  | _col1 
---------+-------
D:true  |     1 
B:false |     1 
C:false |     1 
C:true  |     2 
A:false |     1 
A:true  |     2 

https://prestosql.io/docs/current/functions/map.html

相关内容

  • 没有找到相关文章

最新更新