不能混合聚合值和非聚合值

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;