Pertama Anda menyimpan semua JSON dalam satu baris, jika Anda ingin menanyakan data seperti ini, setiap penduduk harus memiliki baris JSON-nya sendiri:
*other_fields*, {"A": 1, "B": "Debra", "C": "Peters", "D": "[email protected]", "E": "Female", "F": "Tsagaan-Ovoo"}
*other_fields*, {"A": 2, "B": "Marc", "C": "Rasmussen", "D": "[email protected]", "E": "Male", "F": "Copenhagen"}
Kedua Anda tidak perlu menghitung data yang diekstraksi, Anda hanya perlu menghitung baris untuk setiap negara yang diekstraksi. Ini akan berhasil:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Ketiga, Anda tidak ingin GROUP BY data
sama sekali karena ini mungkin unik per penduduk. Ini akan membuat Anda memiliki grup untuk setiap baris. Saya pikir Anda hanya ingin:
GROUP BY country
Menyatukan semuanya:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Untuk kinerja yang layak, Anda dapat mempertimbangkan untuk menempatkan indeks sekunder di negara yang diekstrak.. lihat DOCS