SQL 查询中的嵌套数组

Nested array in a SQL query

我对编程还很陌生,我正在为 SQL 查询而苦苦挣扎。

我想将购买的文章 (article_id) 分组到一个数组中,以便将它们连接到日期列。对于进一步的过程,它们可能会合并(因此日期 x 与 articles_id [A,B,C])

合并

为了更清楚,我想在下面展示我所做的事情..

起点就是这个例子table:

Date Customer_id article_id
123 1 A
123 1 C
125 1 B
124 2 A
126 2 C

SELECT 
customer_id,
array_agg(UNIX_SECONDS(Date)) AS Date,
STRING_AGG(((CAST(article_id AS STRING)))) AS article_id
FROM table
GROUP BY customer_id;

我设法将 table 转换为

Customer_id date article_id
1 [123, 125] A, B, C
2 [124, 126] A, C

终于没有问题了!

可以吗

要到达:

Customer_id date article_id
1 [123, 125] [[A, C], [B]]
2 [124, 126] [[A], [C]]

如果是,怎么做?

感谢您提供的每条建议或措辞,让我继续搜索。当然感谢您的宝贵时间。

尝试分两步完成。 第 1 步,按 customer_id 和日期分组,然后将你的 article_id 串起来。 这将为您提供日期 123 所需的 [A, C]。

然后将该查询用作外部查询的 FROM,您应该能够得到您要查找的内容。 (如果您喜欢那种格式,也可以使用 WITH 子句)

这个呢?聚合两次,第一次是 customer_id,date_time。然后简单地为customer_id。 (抱歉,我已将日期列称为 date_time)

with input as (
select 123 date_time, 1 customer_id, 'A' article_id
UNION ALL
select 123 date_time, 1 customer_id, 'C' article_id
UNION ALL
select 125 date_time, 1 customer_id, 'B' article_id
UNION ALL
select 124 date_time, 2 customer_id, 'A' article_id
UNION ALL
select 126 date_time, 2 customer_id, 'C' article_id)


select customer_id, array_agg(distinct date_time) date_time, array_agg(STRUCT(article_id)) article_id from (
   select customer_id,date_time, array_agg(article_id) article_id from input
   group by customer_id, date_time
) group by customer_id