Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Contagem de tipos de dados MySQL json e groupby


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