Uppdatering:Okej
För det första skulle jag definitivt rekommendera att normalisera data lite. Har du testat att bara lagra objekten i detaljkolumnen? Om du behövde lagra grupper av data med varje prov-id kan du använda en relaterande tabell. IE:)
Exempel
id int automatisk ökning
mysql> create table Sample (id int(11) not null auto_increment, primary key(id));
Detaljer
sample_id intrecord json
mysql> create table Details (sample_id int(11), record json);
Fyll i dina uppgifter
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"}');
Då kan du göra något liknande
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
Resultat
+---------------------------------------------------------------------+
| (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} |
+---------------------------------------------------------------------+
Om du inte vill (eller inte kan) använda en normaliserad datamängd, kanske du kan titta på att skriva en lagrad procedur som går över dina detaljkolumner och aggregerar data för var och en, med en fråga som aggregerar de två datauppsättningar.