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