gpt4 book ai didi

sql - 在分组/聚合期间连接/合并数组值

转载 作者:行者123 更新时间:2023-11-29 11:08:45 24 4
gpt4 key购买 nike

我有一个包含数组列类型的表:

 title       tags
"ridealong";"{comedy,other}"
"ridealong";"{comedy,tragedy}"
"freddyjason";"{horror,silliness}"

我想编写一个查询,为每个标题生成一个数组(在理想情况下,它将是一个集合/去重数组)

例如

select array_cat(tags),title from my_test group by title

上面的查询当然不起作用,但我想生成 2 行:

"ridealong";"{comedy,other,tragedy}"
"freddyjason";"{horror,silliness}"

任何帮助或指点将不胜感激(我使用的是 Postgres 9.1)


根据 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', '{comedy,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 查询,例如:

SELECT title, array_agg(DISTINCT tag ORDER BY tag) 
FROM my_test, unnest(tags) tag
GROUP BY title;

在这种情况下,您不需要自定义聚合。由于重复数据删除,这对于大数据集来说可能要慢一些。不过,如果不需要,删除 ORDER BY 可能会有所帮助。

关于sql - 在分组/聚合期间连接/合并数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com