如何将 JSON 值展平为 SQL 中的频率计数

How to flatten JSON values into frequency counts in SQL

我有一个包含 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