sql – 在分组/聚合期间连接/合并数组值
发布时间:2020-12-12 06:51:43 所属栏目:MsSql教程 来源:网络整理
导读:我有一个数组列类型的表: title tags"ridealong";"{comedy,other}""ridealong";"{comedy,tragedy}""freddyjason";"{horror,silliness}" 我想编写一个查询,每个标题生成一个数组(理想情况下,它将是一个set / deduplicated数组) 例如 select array_cat(tags),t
我有一个数组列类型的表:
title tags "ridealong";"{comedy,other}" "ridealong";"{comedy,tragedy}" "freddyjason";"{horror,silliness}" 我想编写一个查询,每个标题生成一个数组(理想情况下,它将是一个set / deduplicated数组) 例如 select array_cat(tags),title from my_test group by title 上面的查询当然不起作用,但我想生成2行: "ridealong";"{comedy,other,silliness}" 任何帮助或指示将非常感谢 基于Craig的帮助,我最终得到了以下内容(自9.1以来,语法略有改变,完全按照他的说法抱怨查询) SELECT t1.title,array_agg(DISTINCT tag.tag) FROM my_test t1,(select unnest(tags) as tag,title from my_test) as tag where tag.title=t1.title GROUP BY t1.title; 解决方法自定义聚合方法1:定义自定义聚合. Here’s one I wrote earlier. CREATE TABLE my_test(title text,tags text[]); INSERT INTO my_test(title,tags) VALUES ('ridealong','{comedy,other}'),('ridealong',tragedy}'),('freddyjason','{horror,silliness}'); CREATE AGGREGATE array_cat_agg(anyarray) ( SFUNC=array_cat,STYPE=anyarray ); select title,array_cat_agg(tags) from my_test group by title; LATERAL查询 …或者由于您不想保留订单并希望进行重复数据删除,您可以使用LATERAL查询,例如: SELECT title,array_agg(DISTINCT tag ORDER BY tag) FROM my_test,unnest(tags) tag GROUP BY title; 在这种情况下,您不需要自定义聚合.由于重复数据删除,这对于大数据集来说可能要慢得多.但是,如果不需要,删除ORDER BY可能会有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |