在MySQL中,可以使用內置的JSON函數來實現復雜的JSON聚合
JSON_ARRAYAGG()
和JSON_OBJECTAGG()
函數:這兩個函數分別用于將JSON值聚合成JSON數組和JSON對象。
示例:假設有一個名為employees
的表,其中包含員工的id
,name
和position
字段,我們希望將這些信息聚合成一個JSON對象數組。
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'id', id,
'name', name,
'position', position
)
) AS employees_json
FROM employees;
JSON_EXTRACT()
和JSON_SET()
函數:這兩個函數用于從JSON值中提取數據并更新JSON值。
示例:假設有一個名為orders
的表,其中包含訂單的id
,customer_id
和items
字段(items
字段是一個JSON數組,包含每個商品的詳細信息)。我們希望計算每個客戶的訂單總數。
SELECT customer_id, JSON_ARRAYAGG(JSON_LENGTH(items)) AS total_items
FROM orders
GROUP BY customer_id;
JSON_MERGE_PATCH()
函數:此函數用于將兩個JSON對象合并為一個。
示例:假設有一個名為orders
的表,其中包含訂單的id
,customer_id
和items
字段(items
字段是一個JSON數組,包含每個商品的詳細信息)。我們希望將每個訂單的客戶信息合并到一個JSON對象中。
SELECT id, JSON_MERGE_PATCH(
JSON_OBJECT('customer_id', customer_id),
JSON_OBJECT('items', items)
) AS order_json
FROM orders;
JSON_FILTER()
函數:此函數用于從JSON數組中過濾元素。
示例:假設有一個名為products
的表,其中包含產品的id
,name
和price
字段,我們希望找到價格大于10的所有產品。
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'id', id,
'name', name,
'price', price
)
) AS products_above_10
FROM products
WHERE price > 10;
這些示例僅涉及MySQL中JSON聚合的一些基本用法。您可以根據實際需求組合使用這些函數以實現更復雜的JSON聚合。