You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换数据表并汇总列值计数生成单行列统计结果

列值计数汇总并转换为单行键值对格式的实现方法

原始数据与需求

生成原始数据的SQL

with _temp_data as 
(
select 
    unnest(ARRAY['A','B','A','A']) as hobbies_1
    ,unnest(ARRAY['E','F','A','F']) as hobbies_2
)
select * from _temp_data

原始数据输出

hobbies_1|hobbies_2|
---------+---------+
A        |E        |
B        |F        |
A        |A        |
A        |F        |

目标格式

将两列分别按值计数,汇总为单行的键值对形式:

hobbies_1      |  hobbies_2
{'A':3,'B':1}  |{'E':1,'A':1,'F':2}

(注:原需求中hobbies_2的F重复是笔误,实际计数应为F:2、A:1、E:1)


实现方法

方法1:生成JSON格式结果(推荐,便于后续处理)

使用PostgreSQL的jsonb_object_agg函数,直接将分组计数后的键值对聚合为JSON对象:

with _temp_data as (
    select 
        unnest(ARRAY['A','B','A','A']) as hobbies_1
        ,unnest(ARRAY['E','F','A','F']) as hobbies_2
)
select
    jsonb_object_agg(h1.val, h1.cnt) as hobbies_1,
    jsonb_object_agg(h2.val, h2.cnt) as hobbies_2
from (
    -- 对hobbies_1列分组计数
    select hobbies_1 as val, count(*) as cnt
    from _temp_data
    group by hobbies_1
) h1,
(
    -- 对hobbies_2列分组计数
    select hobbies_2 as val, count(*) as cnt
    from _temp_data
    group by hobbies_2
) h2;

输出结果:

hobbies_1       | hobbies_2
----------------+----------------------
{"A": 3, "B": 1}|{"A": 1, "E": 1, "F": 2}

方法2:生成完全匹配需求的字符串格式

如果需要严格匹配单引号包裹的字典样式字符串,使用string_agg和format函数拼接:

with _temp_data as (
    select 
        unnest(ARRAY['A','B','A','A']) as hobbies_1
        ,unnest(ARRAY['E','F','A','F']) as hobbies_2
)
select
    format('{%s}', string_agg(format('%s:%s', quote_literal(val), cnt), ',')) as hobbies_1,
    format('{%s}', string_agg(format('%s:%s', quote_literal(val), cnt), ',')) as hobbies_2
from (
    select hobbies_1 as val, count(*) as cnt
    from _temp_data
    group by hobbies_1
) h1,
(
    select hobbies_2 as val, count(*) as cnt
    from _temp_data
    group by hobbies_2
) h2;

输出结果:

hobbies_1      | hobbies_2
---------------+-----------------------
{'A':3,'B':1}  |{'A':1,'E':1,'F':2}

内容的提问来源于stack exchange,提问作者Learn Hadoop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:02:31