如何按标识符分组并在 postgreSQL 中创建一个 JSON 对象数组?

How do I group by identifier and create an array of JSON objects in postgreSQL?

我有 table 笔交易,我需要按 customerId 分组并在数组中创建汇总的 JSON 记录。

customerId|transactionVal|day
      1234|             2|2019-01-01
      1234|             3|2019-01-04
        14|             1|2019-01-01

我想要做的是 return 像这样的事情:

customerId|transactions
      1234|[{'transactionVal': 2, 'day': '2019-01-01'}, {'transactionVal': 3, 'day': '2019-01-04'}]
        14|[{'transactionVal': 1, 'day': '2019-01-01'}]

稍后我需要遍历数组中的每个事务以计算 transactionVal 中的百分比变化。

我搜索了一段时间,但似乎找不到解决这个问题的方法,因为 table 非常大,超过 7000 万行。

谢谢!

应该可以像这样使用 array_aggjson_build_object

ok=# select customer_id, 
     array_agg(json_build_object('thing', thing, 'time', time)) 
     from test group by customer_id;

 customer_id |                                             array_agg                                             
-------------+---------------------------------------------------------------------------------------------------
           2 | {"{\"thing\" : 1, \"time\" : 1}"}
           1 | {"{\"thing\" : 1, \"time\" : 1}",
                "{\"thing\" : 2, \"time\" : 2}",
                "{\"thing\" : 3, \"time\" : 3}"}
(2 rows)

ok=# select * from test;
 customer_id | thing | time 
-------------+-------+------
           1 |     1 |    1
           2 |     1 |    1
           1 |     2 |    2
           1 |     3 |    3
(4 rows)

ok=#