Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL agregat jumlah objek JSON

Pembaruan:Oke

Pertama, saya pasti akan merekomendasikan sedikit menormalkan data. Sudahkah Anda mencoba menyimpan hanya objek ke dalam kolom detail? Jika Anda perlu menyimpan grup data dengan setiap ID Sampel, Anda dapat menggunakan tabel terkait. yaitu :)

Contoh

id int kenaikan otomatis

mysql> create table Sample (id int(11) not null auto_increment, primary key(id));

Detail

sample_id intrecord json

mysql> create table Details (sample_id int(11), record json);

Isi data Anda

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"}');

Kemudian Anda dapat melakukan sesuatu seperti

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 

Hasil

+---------------------------------------------------------------------+
| (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}                        |
+---------------------------------------------------------------------+

Jika Anda tidak ingin (atau tidak bisa) menggunakan dataset yang dinormalisasi, maka mungkin Anda mungkin melihat ke dalam penulisan prosedur tersimpan yang mengulang kolom detail Anda dan menggabungkan data untuk masing-masing kolom, dengan kueri yang menggabungkan keduanya kumpulan data.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Impor MySQL 5.7.12 tidak dapat membuat nilai JSON dari string dengan 'biner' CHARACTER SET

  2. Bisakah MySQL mengganti banyak karakter?

  3. Yii2 dan menyimpan data dalam database sebagai UTC

  4. Praktik terbaik untuk menyimpan nama pengguna &kata sandi di Database MySQL

  5. Praktik Terbaik mysqldump:Bagian 2 – Panduan Migrasi