Opdatering:Okay
For det første vil jeg helt klart anbefale at normalisere dataene en smule. Har du prøvet kun at gemme objekterne i kolonnen med detaljer? Hvis du havde brug for at gemme grupper af data med hver prøve-id, kan du bruge en relaterende tabel. IE:)
Eksempel
id int automatisk stigning
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);
Udfyld dine data
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"}');
Så kan du gøre sådan noget som
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
Resultater
+---------------------------------------------------------------------+
| (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} |
+---------------------------------------------------------------------+
Hvis du ikke vil (eller ikke kan) bruge et normaliseret datasæt, kan du måske overveje at skrive en lagret procedure, der går over dine detaljerede kolonner og samler dataene for hver enkelt, med en forespørgsel, der samler de to datasæt.