sql >> Database >  >> RDS >> Mysql

Mysql json datatype count en groupby

Ten eerste slaat u alle JSON op in één rij, als u de gegevens op deze manier wilt opvragen, moet elke bewoner zijn eigen rij van zijn/haar eigen JSON hebben:

*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"}

Ten tweede hoeft u de geëxtraheerde gegevens niet te tellen, u hoeft alleen de rijen voor elk geëxtraheerd land te tellen. Dit is voldoende:

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

Ten derde wil je geen GROUP BY data helemaal niet aangezien dit vermoedelijk uniek is per bewoner. Zo heb je voor elke rij een groep. Ik denk dat je gewoon wilt:

GROUP BY country

Alles bij elkaar:

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

Voor behoorlijke prestaties kunt u overwegen een secundaire index op het geëxtraheerde land te plaatsen. zie DOCS




  1. MySQL bestelt een datumbereik tot het begin en bestelt vervolgens al het andere volgens andere criteria

  2. Hoe voeg ik een rij in een tabel in die slechts één autoincrement-kolom heeft?

  3. Fatale fout:aanroep naar niet-gedefinieerde functie getsqlvaluestring()

  4. Log in met LDAP met JSF 2,1 &Apache Tomcat