sql >> Base de Datos >  >> RDS >> Mysql

Recuento de tipos de datos mysql json y groupby

En primer lugar, está almacenando todo el JSON en una fila, si desea consultar los datos de esta manera, cada residente debe tener su propia fila de su propio 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"}

En segundo lugar, no necesita contar los datos extraídos, solo necesita contar las filas para cada país extraído. Esto hará:

SELECT JSON_EXTRACT(data, "$.F") AS country,
       COUNT(*) AS num_residents

En tercer lugar, no desea GROUP BY data en absoluto, ya que es presumiblemente único por residente. Esto te dejará con un grupo para cada fila. Creo que solo quieres:

GROUP BY country

Poniendo todo junto:

  SELECT JSON_EXTRACT(data, "$.F") AS country,
         COUNT(*) AS num_residents
    FROM kpi_data
   WHERE schema_id = 39
GROUP BY country

Para un rendimiento decente, puede considerar colocar un índice secundario en el país extraído. Consulte DOCS