【发布时间】:2020-02-02 16:23:17
【问题描述】:
我需要对 Postgres 数据库运行查询并将其聚合并使用本机 Postgres 工具将其导出为 json 对象。
我不能完全让聚合正常工作,我有点难过。
以下是部分数据示例
| msgserial | object_type | payload_key | payload | user_id |
+-----------+---------------+-------------+-----------------------------------------------------------+---------+
| 1696962 | CampaignEmail | a8901b2c | {"id": "ff7221da", "brand": "MAGIC", "eventType": "SENT"} | 001 |
| 1696963 | OtherType | b8901b2c | {"id": "ff7221db", "brand": "MAGIC", "eventType": "SENT"} | 001 |
| 1696964 | OtherType | c8901b2c | {"id": "ff7221dc", "brand": "MAGIC", "eventType": "SENT"} | 002 |
| 1696965 | OtherType | d8901b2c | {"id": "ff7221dd", "brand": "MAGIC", "eventType": "SENT"} | 001 |
| 1696966 | CampaignEmail | e8901b2c | {"id": "ff7221de", "brand": "MAGIC", "eventType": "SENT"} | 001 |
| 1696967 | CampaignEmail | f8901b2c | {"id": "ff7221df", "brand": "MAGIC", "eventType": "SENT"} | 002 |
| 1696968 | SomethingElse | g8901b2c | {"id": "ff7221dg", "brand": "MAGIC", "eventType": "SENT"} | 001 |
+-----------+---------------+-------------+-----------------------------------------------------------+---------+
我需要输出这样一个按 user_id 分组的 JSON 对象
{
"user_id": 001,
"brand": "MAGIC",
"campaignEmails": [
{"id": "ff7221da", "brand": "MAGIC", "eventType": "SENT"},
{"id": "ff7221de", "brand": "MAGIC", "eventType": "SENT"},
{"id": "ff7221de", "brand": "MAGIC", "eventType": "SENT"}
],
"OtherTypes": [
{"id": "ff7221db", "brand": "MAGIC", "eventType": "SENT"},
{"id": "ff7221dd", "brand": "MAGIC", "eventType": "SENT"}
],
"Somethingelses": [
{"id": "ff7221dg", "brand": "MAGIC", "eventType": "SENT"}
]
},
{
"user_id": 002,
"campaignEmails": [
],
"OtherTypes": [
],
"Somethingelses": [
]
}
基本上需要将所有有效负载按其类型分组到数组中,这些数组由 user_id 分组
我从 JSONB_BUILD_OBJECT 开始,将其中一个 object_types 组合到一个数组中,但后来被难住了。
我是否试图在原始 PSQL 中实现不可能的目标?我真的很难过,我一直遇到错误,比如 X 需要包含在 GROUP BY 子句中等等......
我可以将其中一个 object_types 分组到一个按 user_id 分组的数组中,但似乎不能全部完成 3 个
我的另一个想法是要有 3 个子查询,但我也不知道该怎么做。
【问题讨论】:
标签: sql postgresql aggregate jsonb