我在Teradata。我有一个如下的订单表。
custID | orderID | month | order_amount
-----------------------------------------
1 | 1 | jan | 10
1 | 2 | jan | 20
1 | 3 | feb | 5
1 | 4 | feb | 7
2 | 5 | mar | 20
2 | 6 | apr | 30
我想在上表中添加一个名为“每个客户每月平均订单金额”的列。由于表格处于订单级别,因此添加此列将导致重复,如下所示,这是可以的。
custID | orderID | month | order_amount | avgOrdAmtperMonth
-------------------------------------------------------------
1 | 1 | jan | 10 | 15
1 | 2 | jan | 20 | 15
1 | 3 | feb | 5 | 6
1 | 4 | feb | 7 | 6
2 | 5 | mar | 20 | 20
2 | 6 | apr | 30 | 30
我希望输出包含上面的所有列,而不仅仅是custid和新列。我不知道如何写这个,因为表的一部分是订单级别,新列需要按客户+月分组。我该怎么做?
答案 0 :(得分:3)
这是一个简单的组平均值:
AVG(order_amount) OVER (PARTITION BY custID, month)
答案 1 :(得分:3)
为什么不在查询表时进行计算?
select t.*,
avg(order_amount) over (partition by custId, month) as avgOrderAmtPerMonth
from t;
如果要将其添加到多个下游查询中,可以将其添加到视图中。
实际上,将列添加到表中是一项维护"噩梦"。您必须向表中添加触发器并更新更新,插入和删除的值。