gpt4 book ai didi

sql - Postgres 基于 2 列聚合结果

转载 作者:行者123 更新时间:2023-11-29 11:38:06 24 4
gpt4 key购买 nike

在 postgres 9.6 中,我有一个包含这 3 列的表格。

id | val1 | val2
------------------
1 | x | 1
1 | x | 2
1 | x | 3
1 | y | 4
2 | y | 1
2 | y | 2

我可以使用聚合函数将它变成这样吗?

id | 
------------------------------
1 | { x: [1, 2, 3], y: [4] }
2 | { y: [1, 2] }

或者如果我正在寻找的东西是不可能的,下面的东西也可以工作。或者任何可以让我在我的应用程序代码中将结果转换为上述内容的东西。

id | 
------------------------------
1 | [ {x: 1}, {x: 2}, {x: 3}, {y: 4} ]
2 | [ {y: 1}, {y: 2} ]

我知道我可以做类似 select id, array_agg(val2) from mytable group by val2 的操作,但那只会按 val2 分组并返回类似

id | 
------------------
1 | [1, 2, 3, 4]
2 | [1, 2]

最佳答案

你可以这样做:

SELECT
id, json_object_agg(val1, aaa)
FROM
(
SELECT
id, val1, json_agg(val2) AS aaa
FROM
t
GROUP BY
id, val1
) AS q
GROUP BY
id;
id | json_object_agg               -: | :----------------------------- 1 | { "x" : [1, 2, 3], "y" : [4] } 2 | { "y" : [1, 2] }              

您可以在 dbfiddle here 找到生成此结果所需的定义

您将使用这两个函数:

  • json_agg
  • json_object_agg

文档可以在 9.20. Aggregate Functions 找到在 PostgreSQL 文档中

关于sql - Postgres 基于 2 列聚合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44861825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com