sql - 不能混合聚合值和非聚合值
问题描述
我有一个表(table1),其中包含 3 个类别/子类别列、callID、客户端 ID 和持续时间。客户端 ID 可以重复(它们具有属于不同子类别的不同 callID)。
我有另一个具有唯一客户 ID 和 $amount 的表(table2)。
我希望使用 with 语句,其中的表显示唯一 ID 和 sum(duration) 作为 Totalduration(来自表 1)。然后选择 cat1, cat2, cat3, clientID, sum(duration), $amount*Totalduration/duration 两个表的内连接,按 1,2,3,4 分组
基本上,这将根据持续时间按比例计算 $amount。但这当然行不通,不能混合聚合和非聚合:(
请有关于如何做到这一点的任何提示/想法?
谢谢
编辑:
表格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
表 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 在 A/A/A 中的持续时间为 50 分钟,在 A/A/C 中为 30 分钟,成本为 150,在 Result_table 中,我们将为行 A/A/A 添加 50 分钟的总持续时间和 150* 30/(30+50) 混合成本。然后用同样的逻辑不断总结以下客户。
解决方案
我想我明白了。您试图将客户的成本分摊到各个类别中,然后按类别进行汇总。窗口功能!
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;
推荐阅读
- javascript - 在 ReCharts 中的 X 轴上显示 24 小时时间
- c++ - GCC 需要为等待对象移动 ctor,即使它是左值
- powershell - 让 PowerShell 根据当前月份名称读取对象名称的语法
- django - Django 无法持久化缓存数组
- php - Google Calendar APIv3 - 如何使用 webhook 处理传入的资源更改通知?
- python - python pandas:如何修改列标题名称和修改日期格式
- node.js - 使用 Node 包或开源工具将 pdf 转换为图像
- java - docker中连接的Java JDBC无法连接到主机数据库
- json - 将具有另一个数组元素的 JSON 数组移动到相同的级别
- search - 3 列产品类别和 4 列搜索结果