Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Rozwiń JSON z nieznanymi kluczami do wierszy za pomocą MySQL JSON_TABLE

Możesz użyć enumarete, używając ROW_NUMBER() funkcja okna podczas określania wartości klucza za pomocą JSON_KEYS() , a następnie wyodrębnij odpowiednie klucze za pomocą JSON_EXTRACT() z tablic, które otrzymaliśmy, takich jak

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

lub użyj następującego zapytania jako prostszego

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO::PARAM dla typu dziesiętnego?

  2. MySQL:Czy możesz określić losowy limit?

  3. Pobierz wszystkie wiadomości i wszystkie komentarze

  4. Problemy ze sterownikiem MySQL

  5. Czy istnieje mysql JDBC, który będzie respektował fetchSize?