不能混合聚合值和非聚合值
Cannot mix aggregate and non-aggregate values
我有一个 table (table1),其中包含 3 categories/sub-categories 列、呼叫 ID、客户端 ID 和持续时间。客户端 ID 可以重复(它们具有属于不同子类别的不同 callID)。
我有另一个 table (table2),具有唯一的客户端 ID 和 $ 金额。
我希望使用 with 语句,table 显示唯一 ID 和总和(持续时间)作为总持续时间(来自 table 1)。
然后 select cat1, cat2, cat3, clientID, sum(duration), $amount*Totalduration/duration 与两个 tables 的内部连接,按 1,2,3 分组, 4
基本上,这会根据持续时间按比例分配 $amount。但这当然行不通,不能混合聚合和非聚合:(
请问 tips/ideas 如何做到这一点?
谢谢
编辑:
Table 1:
Cat 1 Cat 2 Cat 3 CallID Client ID Duration
A A A 1 1 50
A A C 2 1 30
A A A 3 2 52
A A C 4 3 20
A B C 5 3 40
C C C 6 3 15
A C C 7 4 18
C C C 8 5 65
C B B 9 6 51
Table 2:
Client ID Cost
1 150
2 190
3 130
4 120
5 140
6 190
我正在尝试为 3 只猫的每个独特组合获取此 Result_table:
Cat 1 Cat 2 Cat 3 Total Duration Blended Cost
A A A ... ...
A A C ... ...
A B C ... ...
C C C ... ...
A C C ... ...
C C C ... ...
C B B ... ...
成本按比例混合到唯一客户端 ID 的持续时间。例如,客户 1 的持续时间为 50 分钟 ins A/A/A,30 分钟在 A/A/C 中,成本为 150,在 Result_table 中,我们将为第 A/A/A 行添加总计 50 分钟持续时间和 150*30/(30+50) 混合成本。然后用同样的逻辑继续总结下面的客户
我认为我明白了。您正在尝试将客户的成本分摊到各个类别,然后按类别汇总。 Window 函数!
select cat1, cat2, cat3, sum(duration),
sum(cost * duration * 1.0 / client_duration) as blended_cost
from (select t1.*, t2.cost,
sum(t1.duration) over (partition by t1.clientid) as client_duration
from table1 t1 join
table2 t2
on t1.clientid = t2.clientid
) t1
group by cat1, cat2, cat3;
我有一个 table (table1),其中包含 3 categories/sub-categories 列、呼叫 ID、客户端 ID 和持续时间。客户端 ID 可以重复(它们具有属于不同子类别的不同 callID)。
我有另一个 table (table2),具有唯一的客户端 ID 和 $ 金额。
我希望使用 with 语句,table 显示唯一 ID 和总和(持续时间)作为总持续时间(来自 table 1)。 然后 select cat1, cat2, cat3, clientID, sum(duration), $amount*Totalduration/duration 与两个 tables 的内部连接,按 1,2,3 分组, 4
基本上,这会根据持续时间按比例分配 $amount。但这当然行不通,不能混合聚合和非聚合:(
请问 tips/ideas 如何做到这一点?
谢谢
编辑:
Table 1:
Cat 1 Cat 2 Cat 3 CallID Client ID Duration
A A A 1 1 50
A A C 2 1 30
A A A 3 2 52
A A C 4 3 20
A B C 5 3 40
C C C 6 3 15
A C C 7 4 18
C C C 8 5 65
C B B 9 6 51
Table 2:
Client ID Cost
1 150
2 190
3 130
4 120
5 140
6 190
我正在尝试为 3 只猫的每个独特组合获取此 Result_table:
Cat 1 Cat 2 Cat 3 Total Duration Blended Cost
A A A ... ...
A A C ... ...
A B C ... ...
C C C ... ...
A C C ... ...
C C C ... ...
C B B ... ...
成本按比例混合到唯一客户端 ID 的持续时间。例如,客户 1 的持续时间为 50 分钟 ins A/A/A,30 分钟在 A/A/C 中,成本为 150,在 Result_table 中,我们将为第 A/A/A 行添加总计 50 分钟持续时间和 150*30/(30+50) 混合成本。然后用同样的逻辑继续总结下面的客户
我认为我明白了。您正在尝试将客户的成本分摊到各个类别,然后按类别汇总。 Window 函数!
select cat1, cat2, cat3, sum(duration),
sum(cost * duration * 1.0 / client_duration) as blended_cost
from (select t1.*, t2.cost,
sum(t1.duration) over (partition by t1.clientid) as client_duration
from table1 t1 join
table2 t2
on t1.clientid = t2.clientid
) t1
group by cat1, cat2, cat3;