En primer lugar, está almacenando todo el JSON en una fila, si desea consultar los datos de esta manera, cada residente debe tener su propia fila de su propio JSON:
*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"}
En segundo lugar, no necesita contar los datos extraídos, solo necesita contar las filas para cada país extraído. Esto hará:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
En tercer lugar, no desea GROUP BY data
en absoluto, ya que es presumiblemente único por residente. Esto te dejará con un grupo para cada fila. Creo que solo quieres:
GROUP BY country
Poniendo todo junto:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Para un rendimiento decente, puede considerar colocar un índice secundario en el país extraído. Consulte DOCS