Mysql
 sql >> база данни >  >> RDS >> Mysql

Разширете JSON с неизвестни ключове до редове с MySQL JSON_TABLE

Можете да използвате enumarete, като използвате ROW_NUMBER() функция прозорец, докато се определят стойностите на ключовете чрез използване на JSON_KEYS() , и след това извлечете съответните ключове с помощта на JSON_EXTRACT() от масивите, които получихме като

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

или използвайте следната заявка като по-проста

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

Демо



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. търсене на арабски думи, които имат диакритични знаци в mysql

  2. Примка на PDO и отпечатване на fetchAll

  3. Най-добрият начин да премахнете стойност от полето SET?

  4. Библиотеката не е заредена:грешка libmysqlclient.16.dylib при опит за стартиране на 'rails server' на OS X 10.6 с mysql2 gem

  5. Съхраняването на файлове с изображения в базата данни Mongo, добра идея ли е?