Actualización:Está bien
Primero, definitivamente recomendaría normalizar un poco los datos. ¿Ha intentado almacenar solo los objetos en la columna de detalles? Si necesita almacenar grupos de datos con cada ID de muestra, puede usar una tabla relacionada. ES:)
Muestra
id int incremento automático
mysql> create table Sample (id int(11) not null auto_increment, primary key(id));
Detalles
sample_id intrecord json
mysql> create table Details (sample_id int(11), record json);
Complete sus datos
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"}');
Entonces puedes hacer algo como
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
Resultados
+---------------------------------------------------------------------+
| (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} |
+---------------------------------------------------------------------+
Si no quiere (o no puede) usar un conjunto de datos normalizado, entonces tal vez podría considerar escribir un procedimiento almacenado que recorre sus columnas de detalles y agrega los datos para cada uno, con una consulta que agrega los dos conjuntos de datos.