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

Mysql json datatype count og groupby

For det første gemmer du al JSON i én række, hvis du ønsker at forespørge dataene på denne måde, skal hver beboer have sin egen række med sin egen 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"}

For det andet behøver du ikke at tælle de udtrukne data, du skal blot tælle rækkerne for hvert udtrukket land. Dette vil gøre:

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

For det tredje ønsker du ikke at GROUP BY data overhovedet, da dette formodentlig er unikt pr. beboer. Dette vil efterlade dig med en gruppe for hver række. Jeg tror, ​​du bare vil:

GROUP BY country

At sætte det hele sammen:

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

For en anstændig ydeevne kan du overveje at placere et sekundært indeks på det udtrukne land.. se DOCS




  1. fejl ændring af tabel, tilføjelse af begrænsning udenlandsk nøgle får fejl Kan ikke tilføje eller opdatere en underordnet række

  2. MySQL fuldtekstsøgning har altid 0 resultater?

  3. Hvad er det optimale MYSQL-forespørgselsnummer i php-script?

  4. Hvordan anvender man en funktion til hvert element i en matrixkolonne i Postgres?