Primeiramente você está armazenando todo o JSON em uma linha, se você quiser consultar os dados assim, cada residente deve ter sua própria linha de seu próprio 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"}
Em segundo lugar, você não precisa contar os dados extraídos, você só precisa contar as linhas para cada país extraído. Isso fará:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Em terceiro lugar, você não quer
GROUP BY data
em tudo, pois isso é presumivelmente único por residente. Isso deixará você com um grupo para cada linha. Acho que você só quer:GROUP BY country
Juntando tudo:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Para um desempenho decente, você pode considerar colocar um índice secundário no país extraído. consulte DOCS