我是 sql 新手,到目前为止,这个论坛一直是我的生命线。感谢您在这个伟大的平台上创建和分享。
我目前正在处理一个大型数据集,希望得到一些指导。
数据表(existing_table)有 400 万行,如下所示:
id date sales_a sales_b sales_c sales_d sales_e
请注意,有多个行具有相同的日期。
我想要做的是在此表中再添加 5 列(cumulative_sales_a
、cumulative_sales_b
等),这些列将包含 a、b、c 等的累积销售数据,直到特定日期(这将按日期分组)。我使用以下代码来执行此操作:
create table new_cumulative
select t.id, t.date, t.sales_a, t.sales_b, t.sales_c, t.sales_d, t.sales_e,
(select sum(x.sales_a) from existing_table x where x.id = t.id and x.date <= t.date) as cumulative_sales_a,
(select sum(x.sales_b) from existing_table x where x.id = t.id and x.date <= t.date) as cumulative_sales_b,
(select sum(x.sales_c) from existing_table x where x.id = t.id and x.date <= t.date) as cumulative_sales_c,
(select sum(x.sales_d) from existing_table x where x.id = t.id and x.date <= t.date) as cumulative_sales_d,
(select sum(x.sales_e) from existing_table x where x.id = t.id and x.date <= t.date) as cumulative_sales_e
from existing_table t
group by t.id, t.date;
在运行此查询之前,我已经在“id”列上创建了一个索引。
虽然我得到了想要的输出,但这个查询花了将近 11 个小时才完成。
我想知道我是否在这里做错了什么以及是否有更好(更快)的方式来运行此类查询。
谢谢您的帮助。