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
我对编程还很陌生,我正在为 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