add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE test
SELECT 'PPP' col1, '{"A": 0, "B": 5, "C": 10}' col2 UNION ALL
SELECT 'SSS' , '{"A": 5}' UNION ALL
SELECT 'KKK' , '{"A": 5, "B": 5, "C": 10}' UNION ALL
SELECT 'KKK' , '{"C": 20, "B": 5}';
SELECT * FROM test;
Records: 4  Duplicates: 0  Warnings: 0
col1 col2
PPP {"A": 0, "B": 5, "C": 10}
SSS {"A": 5}
KKK {"A": 5, "B": 5, "C": 10}
KKK {"C": 20, "B": 5}
SELECT *, JSON_KEYS(col2)
FROM test;
col1 col2 JSON_KEYS(col2)
PPP {"A": 0, "B": 5, "C": 10} ["A", "B", "C"]
SSS {"A": 5} ["A"]
KKK {"A": 5, "B": 5, "C": 10} ["A", "B", "C"]
KKK {"C": 20, "B": 5} ["B", "C"]
SELECT *,
JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']'))),
JSON_EXTRACT(col2, CONCAT('$.', JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']')))))
FROM test
CROSS JOIN ( SELECT 0 num
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4 ) numbers;
col1 col2 num JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']'))) JSON_EXTRACT(col2, CONCAT('$.', JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']')))))
PPP {"A": 0, "B": 5, "C": 10} 0 A 0
SSS {"A": 5} 0 A 5
KKK {"A": 5, "B": 5, "C": 10} 0 A 5
KKK {"C": 20, "B": 5} 0 B 5
PPP {"A": 0, "B": 5, "C": 10} 1 B 5
SSS {"A": 5} 1 null null
KKK {"A": 5, "B": 5, "C": 10} 1 B 5
KKK {"C": 20, "B": 5} 1 C 20
PPP {"A": 0, "B": 5, "C": 10} 2 C 10
SSS {"A": 5} 2 null null
KKK {"A": 5, "B": 5, "C": 10} 2 C 10
KKK {"C": 20, "B": 5} 2 null null
PPP {"A": 0, "B": 5, "C": 10} 3 null null
SSS {"A": 5} 3 null null
KKK {"A": 5, "B": 5, "C": 10} 3 null null
KKK {"C": 20, "B": 5} 3 null null
PPP {"A": 0, "B": 5, "C": 10} 4 null null
SSS {"A": 5} 4 null null
KKK {"A": 5, "B": 5, "C": 10} 4 null null
KKK {"C": 20, "B": 5} 4 null null
SELECT col1,
JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']'))) `key`,
SUM(JSON_EXTRACT(col2, CONCAT('$.', JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']')))))) `value`
FROM test
CROSS JOIN ( SELECT 0 num
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4 ) numbers
GROUP BY 1,2
HAVING `key` IS NOT NULL;
col1 key value
KKK 41 5
KKK 42 10
KKK 43 30
PPP 41 0
PPP 42 5
PPP 43 10
SSS 41 5
SELECT col1, JSON_OBJECTAGG(`key`, `value`) col2
FROM (
SELECT col1,
JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']'))) `key`,
SUM(JSON_EXTRACT(col2, CONCAT('$.', JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(col2), CONCAT('$[', numbers.num, ']')))))) `value`
FROM test
CROSS JOIN ( SELECT 0 num
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4 ) numbers
GROUP BY 1,2
HAVING `key` IS NOT NULL
) subquery
GROUP BY col1;
col1 col2
KKK {"A": 5, "B": 10, "C": 30}
PPP {"A": 0, "B": 5, "C": 10}
SSS {"A": 5}