I have data like this:
date, event.key, event.values
1 , color, blue
size, big
2 , color, yellow
size, big
3 , color, yellow
size, small
And want to filter rows which contain such key:value pairs: color=blue and size=big. So only this one row remains:
date, event.key, event.values
1 , color, blue
size, big
Advertisement
Answer
You can use unnest()
:
select t.*
from t
where exists (select 1
from unnest(t.event) e
where e.key = 'color' and e.value = 'blue'
) and
exists (select 1
from unnest(t.event) e
where e.key = 'size' and e.value = 'big'
);