Zuerst speichern Sie alle JSON in einer Zeile, wenn Sie die Daten so abfragen möchten, sollte jeder Einwohner eine eigene Zeile mit seinem eigenen JSON haben:
*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"}
Zweitens müssen Sie die extrahierten Daten nicht zählen, Sie müssen nur die Zeilen für jedes extrahierte Land zählen. Das geht:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
Drittens möchten Sie nicht GROUP BY data
überhaupt nicht, da dies vermutlich pro Einwohner einmalig ist. Dadurch erhalten Sie eine Gruppe für jede Zeile. Ich glaube, Sie wollen nur:
GROUP BY country
Alles zusammen:
SELECT JSON_EXTRACT(data, "$.F") AS country,
COUNT(*) AS num_residents
FROM kpi_data
WHERE schema_id = 39
GROUP BY country
Für eine anständige Leistung können Sie erwägen, einen sekundären Index für das extrahierte Land zu platzieren. Siehe DOCS