实际业务需求:
实例表1:(user_id为用户id,prod为产品id) 需要的效果:(求出共有产品id)
方法:拼接字符串:string_agg(字符串,分隔符)
select b.* from (
select a.user_id,string_agg(a.prod,',') from
(select prod,string_agg(user_id,'_') as user_id from gln_test1 group by prod)a group by a.user_id
)b where length(b.user_id)>1;
引申1:
实例表2: 需要的效果:
方法1:字符串拆分: unnest(数组,分隔符),unnest(string_to_array(字符串,分隔符))
select unnest(string_to_array(user_id,'-')) as user_id,prod from
(select * from
(select string_agg(user_id,'-') user_id,prod from gln_test1 group by prod)a
where user_id like '%-%')aa;
方法2:字符串拆分: regexp_split_to_table(字符串,分隔符)
select regexp_split_to_table(user_id,'-')as user_id,prod from
(select * from
(select string_agg(user_id,'-') user_id,prod from gln_test1 group by prod)a
where user_id like '%-%')aa;
引申2:
实例表2: 需要的效果:
方法1:string_to_array(字符串,分隔符) 的效果:字符串变数组
select string_to_array(user_id,'-')as user_id,prod from
(select * from
(select string_agg(user_id,'-') user_id,prod from gln_test1 group by prod)a
where user_id like '%-%')aa;
方法2:regexp_split_to_array(字符串,分隔符) 的效果:字符串变数组
select regexp_split_to_array(user_id,'-')as user_id,prod from
(select * from
(select string_agg(user_id,'-') user_id,prod from gln_test1 group by prod)a
where user_id like '%-%')aa;
引申3:
实例表3: 需要的效果:
方法1:array_agg(字符串)
select a.user_id,array_agg(a.prod) from
(select prod,array_agg(user_id) as user_id from gln_test1 group by prod)a group by a.user_id;