when the possible values ββare known in advance, and many of them cannot write manually SQL - you can use below:
SELECT userid, ts, MAX(IF(params.name = "a", params.value, NULL)) WITHIN RECORD a, MAX(IF(params.name = "b", params.value, NULL)) WITHIN RECORD b, MAX(IF(params.name = "c", params.value, NULL)) WITHIN RECORD c FROM yourTable
If the possible values ββare "unknown" in advance and / or dynamic from start to start, you can use the auxiliary SQL below to generate the upstream SQL type.
SELECT 'select userid, ts, ' + GROUP_CONCAT_UNQUOTED( 'max(if(params.name = "' + STRING(params.name) + '", params.value, null)) WITHIN RECORD as [' + STRING(params.name) + ']' ) + ' from yourTable ' FROM (SELECT params.name FROM yourTable GROUP BY params.name)
source share