sql >> Databasteknik >  >> RDS >> Mysql

Expandera JSON med okända nycklar till rader med MySQL JSON_TABLE

Du kan använda enumarete genom att använda ROW_NUMBER() fönsterfunktion medan nyckelvärdena bestäms genom att använda JSON_KEYS() , och extrahera sedan respektive nycklar med JSON_EXTRACT() från de arrayer vi fick som t.ex.

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

eller använd följande fråga som enklare

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. Behöver hjälp att förstå Magento produktsamlingsobjekt och katalogen/produktmodellen

  2. Ansluter html-formulär till php-sida enligt primärnyckel

  3. Främmande nyckel till icke-primär nyckel

  4. Lagra ett datum där endast årtalet kanske är känt