Mysql
 sql >> Database >  >> RDS >> Mysql

Conteggio del tipo di dati mysql json e groupby

Per prima cosa stai archiviando tutti i JSON in una riga, se vuoi interrogare i dati in questo modo ogni residente dovrebbe avere la propria riga del proprio 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"}

In secondo luogo non è necessario contare i dati estratti, è sufficiente contare le righe per ogni paese estratto. Questo farà:

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

In terzo luogo, non vuoi GROUP BY data in quanto questo è presumibilmente unico per residente. Questo ti lascerà con un gruppo per ogni riga. Penso che tu voglia solo:

GROUP BY country

Mettendo tutto insieme:

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

Per prestazioni decenti, potresti considerare di inserire un indice secondario sul paese estratto.. vedi DOCS