Cập nhật:Được rồi
Đầu tiên, tôi chắc chắn sẽ khuyên bạn nên chuẩn hóa dữ liệu một chút. IE :)
Mẫu
id int tự động tăng
mysql> create table Sample (id int(11) not null auto_increment, primary key(id));
Chi tiết
sample_id intrecord json
mysql> create table Details (sample_id int(11), record json);
Điền dữ liệu của bạn
insert into Sample (id) values (1);
insert into Sample (id) values (2);
insert into Details (sample_id, record) values
(1, '{"id": 1, "name": "T1", "amount": "34.34", "percentage": "45"}'),
(1, '{"id": 3, "name": "T3", "amount": "30.34", "percentage": "45"}'),
(1, '{"id": 2, "name": "T2", "amount": "14.34", "percentage": "15"}');
insert into Details (sample_id, record) values
(2, '{"id": 1, "name": "T1", "amount": "34.34", "percentage": "45"}'),
(2, '{"id": 2, "name": "T2", "amount": "30.34", "percentage": "45"}'),
(2, '{"id": 4, "name": "T4", "amount": "14.34", "percentage": "15"}');
Sau đó, bạn có thể làm điều gì đó như
SELECT (
JSON_OBJECT('id', id, 'amount', amount, 'percentage', percentage)
) FROM (
SELECT
JSON_EXTRACT(record, "$.id") as id,
SUM(JSON_EXTRACT(record, "$.amount")) as amount,
AVG(JSON_EXTRACT(record, "$.percentage")) as percentage
FROM Details
GROUP BY JSON_EXTRACT(record, "$.id")
) as t
Kết quả
+---------------------------------------------------------------------+
| (JSON_OBJECT('id', id, 'amount', amount, 'percentage', percentage)) |
+---------------------------------------------------------------------+
| {"id": 1, "amount": 68.68, "percentage": 45} |
| {"id": 2, "amount": 44.68, "percentage": 30} |
| {"id": 3, "amount": 30.34, "percentage": 45} |
| {"id": 4, "amount": 14.34, "percentage": 15} |
+---------------------------------------------------------------------+
Nếu bạn không muốn (hoặc không thể) sử dụng tập dữ liệu chuẩn hóa, thì có lẽ bạn có thể xem xét cách viết một thủ tục được lưu trữ lặp lại trên các cột chi tiết của bạn và tổng hợp dữ liệu cho từng cột, với một truy vấn tổng hợp cả hai. bộ dữ liệu.