【发布时间】:2022-01-07 09:21:34
【问题描述】:
我有一个表 variants,其中 properties 列类型为 JSON 和一些数据:
| id | product_id | properties(JSON) |
|---|---|---|
| 1 | 1 | [{"name": "Color", "value": "Black"}, {"name": "Size", "value": "Xl"}] |
| 2 | 1 | [{"name": "Color", "value": "Red"}, {"name": "Size", "value": "Xl"}] |
| 3 | 1 | [{"name": "Color", "value": "White"}, {"name": "Size", "value": "L"}] |
| 4 | 2 | [{"name": "Type", "value": "Circle"}] |
| 5 | 2 | [{"name": "Type", "value": "Box"}] |
| 6 | 3 | NULL |
我需要按属性名称和 product_id 获取聚合行,其中每个属性都有一个唯一值数组。预期结果是:
| product_id | aggregated (JSON) |
|---|---|
| 1 | {"Color":["Red", "Black", "White"], "Size": ["XL", "L"]} |
| 2 | {"Type": ["Circle", "Box"]} |
我试图获取 objects 而不是 arrays,但卡住了下一步。
SELECT product_id, JSON_OBJECTAGG(jt.name, jt.value) AS json
FROM variants,
JSON_TABLE(properties, '$[*]' COLUMNS (
name VARCHAR(1024) PATH '$.name' NULL ON EMPTY,
value VARCHAR(1024) PATH '$.value' NULL ON EMPTY)
) AS jt
GROUP BY id;
结果:
| product_id | properties(JSON) |
|---|---|
| 1 | {"Color": "Black", "Size": "Xl"} |
| 1 | {"Color": "Red", "Size": "Xl"} |
| 1 | {"Color": "White", "Size: "L"} |
| 2 | {"Type": "Circle"} |
| 2 | {"Type": "Box"} |
那我该如何合并呢?
【问题讨论】:
-
您的“聚合”没有意义。您在变体表中的数据基本上是产品 1 黑色 XL、产品 1 红色 XL 和产品 1 白色 L。这与产品 1(黑色或红色或白色)(XL 或 L)不同,如您的“聚合”所示建议产品 1 的 6 种变体。
-
@nnichols 我想收集每个属性的所有唯一值。下一步将是查找遗漏的组合。
标签: mysql sql json aggregates