这是我的数据

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,'F':2,'F':1}

推荐答案

在jsonb_object_agg的帮助下,您可以使用下面的查询来实现这一点,

    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, count_h1) AS hobbies_1,
    jsonb_object_agg(h2, count_h2) AS hobbies_2
FROM (
    SELECT
        h1,
        COUNT(*) AS count_h1
    FROM (
        SELECT
            hobbies_1 AS h1
        FROM
            _temp_data
    ) AS subquery
    GROUP BY
        h1
) AS aggregated_hobbies_1
CROSS JOIN (
    SELECT
        h2,
        COUNT(*) AS count_h2
    FROM (
        SELECT
            hobbies_2 AS h2
        FROM
            _temp_data
    ) AS subquery
    GROUP BY
        h2
) AS aggregated_hobbies_2;

内部子查询只按它们所关注的相应列(hobbies_1和hobbies_2)进行 Select 和分组,然后外部查询执行聚合和交叉连接

Sql相关问答推荐

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

获取家谱树中第一次出现的特定信息,然后停止

PG SQL中按条件聚合值

Select /过滤postgr中的树 struct

SQL将 Select 查询作为新列添加到另一个 Select 查询

Django将字符串筛选为整数?

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

带上最后日期(结果)

如何设计一个调用嵌套函数并仅在所有被调用的嵌套函数都提交时才提交的事务,例如,如果一个子函数失败则中止?

在SELECT中将日期格式转换为双周时段

如何在Postgres中为单值输入多行?

从每月生成的系列中生成每日汇率

Select 组中的第一行,但在并发环境中

SQL根据另一列的顺序和值获取组中的最后一列

Postgresql:在链接表中判断相关表中插入值的条件

使用其他表 SUM 的交换价格转换价格并获得 AVG

从每行中排除最大元素

如何找到特定时间间隔内的最大和最小日期?

Lag() 获取snowflake的值变化

Select 随机行,使得列子组的组合是唯一的