Po pierwsze, przechowujesz wszystkie JSON w jednym wierszu, jeśli chcesz zapytać o dane w ten sposób, każdy mieszkaniec powinien mieć swój własny wiersz swojego własnego 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"}
Po drugie, nie musisz liczyć wyodrębnionych danych, wystarczy policzyć wiersze dla każdego wyodrębnionego kraju. To wystarczy:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Po trzecie, nie chcesz GROUP BY data
w ogóle, ponieważ przypuszczalnie jest to wyjątkowe na mieszkańca. W ten sposób zostaniesz z grupą dla każdego rzędu. Myślę, że chcesz po prostu:
GROUP BY country
Podsumowując:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Aby uzyskać przyzwoitą wydajność, możesz rozważyć umieszczenie dodatkowego indeksu w wyodrębnionym kraju. Zobacz DOCS