with t0 as (
select
user_id
from
testt
group by
user_id
),
t1 as (
select
user_id,
val as namev
from
testt
where uname='name'
group by
user_id,uname
),
t2 as (
select
user_id,
val as hobby
from
testt
where uname='hobby'
group by
user_id,uname
),
t3 as (
select
user_id,
val as address
from
testt
where uname='address'
group by
user_id,uname
)
SELECT
*
FROM
t0 LEFT JOIN t1 on t0.user_id =t1.user_id
LEFT JOIN t2 on t1.user_id = t2.user_id
LEFT JOIN t3 on t2.user_id = t3.user_id