Tout d'abord, vous stockez tout le JSON dans une ligne, si vous souhaitez interroger les données comme celle-ci, chaque résident doit avoir sa propre ligne de son propre 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"}
Deuxièmement, vous n'avez pas besoin de compter les données extraites, il vous suffit de compter les lignes pour chaque pays extrait. Cela fera :
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Troisièmement, vous ne voulez pas GROUP BY data
du tout car cela est vraisemblablement unique par résident. Cela vous laissera avec un groupe pour chaque ligne. Je pense que vous voulez juste :
GROUP BY country
Rassembler le tout :
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Pour des performances décentes, vous pouvez envisager de placer un index secondaire sur le pays extrait.. voir DOCS