【发布时间】:2017-07-18 15:01:57
【问题描述】:
我有一些像这样的原始数据:
原始ID|姓名 |数量|聚合ID --|--------|---------|------ 1 |福 | 10 |空值 2 |福 | 20 |空值 3 |福 | 30 |空值 4 |酒吧 | 40 |空值 5 |酒吧 | 50 |空值 6 |酒吧 | 60 |空值我想汇总它们:
SELECT name, sum(quantity)
FROM foobar
GROUP BY name
并将这些结果存储在某处:
聚合ID|姓名 |数量 --|--------|------ 1 |福 | 60 2 |酒吧 | 150我的目标是能够跟踪原始表中的哪些记录用于计算聚合表中的聚合。换句话说,我想将原始表中foo 的所有AggId 值更新为1,并将原始表中bar 的所有AggId 值更新为2。
目前,我正在将聚合返回到分组列上的原始数据,以查找哪些aggIds 与哪些rawIds 相关联:
SELECT a.aggI r.rawId
FROM agg a JOIN raw r ON (a.name = r.name)
有没有更好的方法来做到这一点?例如,也许通过解析函数?
SELECT rawId, name, quantity,
SUM(quantity) OVER (PARTITION BY name) grouped_qty
FROM raw;
结果
原始ID|姓名 |数量|分组数量 --|--------|---------|------ 1 |福 | 10 | 60 2 |福 | 20 | 60 3 |福 | 30 | 60 4 |酒吧 | 40 | 60 5 |酒吧 | 50 | 60 6 |酒吧 | 60 | 60如果我能得到分析函数来为聚合集生成一个序列 ID,那就太好了;但我不确定这是否可能。
【问题讨论】:
-
你的桌子有历史概念吗?在您收集聚合后,是什么阻止某人在该表中插入或更新一个值,从而导致不同的
SUM? -
@Siyual 它有一些历史概念;例如有一个
batch_id列,所有的聚合也被分组在batch_id中。需要处理的新记录总是会出现在另一个batch_id中。