Update:Okay
Zunächst würde ich auf jeden Fall empfehlen, die Daten ein wenig zu normalisieren. Haben Sie versucht, nur die Objekte in der Detailspalte zu speichern? Wenn Sie Datengruppen mit jeder Proben-ID speichern müssen, können Sie eine entsprechende Tabelle verwenden. IE:)
Beispiel
id int automatisches Inkrement
mysql> create table Sample (id int(11) not null auto_increment, primary key(id));
Einzelheiten
sample_id intrecord json
mysql> create table Details (sample_id int(11), record json);
Geben Sie Ihre Daten ein
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"}');
Dann können Sie so etwas tun wie
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
Ergebnisse
+---------------------------------------------------------------------+
| (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} |
+---------------------------------------------------------------------+
Wenn Sie kein normalisiertes Dataset verwenden möchten (oder können), könnten Sie sich vielleicht überlegen, eine gespeicherte Prozedur zu schreiben, die Ihre Detailspalten durchläuft und die Daten für jede Spalte mit einer Abfrage aggregiert, die die beiden aggregiert Datensätze.