sql >> Database >  >> RDS >> Mysql

Vouw JSON met onbekende sleutels uit naar rijen met MySQL JSON_TABLE

U kunt enumarete gebruiken door ROW_NUMBER() . te gebruiken window-functie tijdens het bepalen van de sleutelwaarden met behulp van JSON_KEYS() , en extraheer vervolgens de respectievelijke sleutels met behulp van JSON_EXTRACT() van de arrays die we hebben gekregen, zoals

WITH k AS
(
SELECT *, 
       ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC) AS rn,
       JSON_KEYS(`jsdata`) AS jk
  FROM `tab` AS t
  JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j
)
SELECT JSON_UNQUOTE(JSON_EXTRACT(jk, CONCAT('$[',rn-1,']'))) AS "key", 
       value
  FROM k

of gebruik de volgende vraag als eenvoudiger

SELECT JSON_UNQUOTE(
       JSON_EXTRACT(JSON_KEYS(`jsdata`), 
                    CONCAT('$[',
                    ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC)-1,
                    ']'))
                   ) AS "key", value
  FROM `tab` AS t
  JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j

Demo



  1. Een formulier plaatsen met optionele en verplichte velden

  2. Ondersteuning van door de server opgestelde verklaringen met PDO?

  3. mysql - Hoe om te gaan met zoekopdrachten met speciale tekens %(procent) en _(underscore)

  4. Kan de mysql-server niet starten in ubuntu