Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql json datatype count und groupby

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