我们希望对表执行 GROUP BY 操作。原始表包含一个 ARRAY 列。在一个组内,这些数组的内容应转换为具有唯一元素的单个数组。这些元素不需要排序。包含
最新的 PostgreSQL 版本可用。
原始表示例:
id | fruit | flavors
---: | :----- | :---------------------
| apple | {sweet,sour,delicious}
| apple | {sweet,tasty}
| banana | {sweet,delicious}
期望结果示例:
count_total | aggregated_flavors
----------: | :---------------------------
1 | {delicious,sweet}
2 | {sour,tasty,delicious,sweet}
创建原始表的 SQL 玩具代码:
CREATE TABLE example(id int, fruit text, flavors text ARRAY);
INSERT INTO example (fruit, flavors)
VALUES ('apple', ARRAY [ 'sweet','sour', 'delicious']),
('apple', ARRAY [ 'sweet','tasty' ]),
('banana', ARRAY [ 'sweet', 'delicious']);
我们提出了一个解决方案,需要将数组转换为 s
SELECT COUNT(*) AS count_total,
array
(SELECT DISTINCT unnest(string_to_array(replace(replace(string_agg(flavors::text, ','), '{', ''), '}', ''), ','))) AS aggregated_flavors
FROM example
GROUP BY fruit
然而我们认为这不是最佳的,并且可能会有问题,因为我们假设字符串既不包含“{”、“}”也不包含“,”。感觉必须有函数可以按照我们需要的方式组合数组,但我们找不到它们。
非常感谢大家!