DataWorks中maxcompute分组count的结果 t1,和在t1基础上同样分组sum结果就不一致了,是什么原因?select a,b,count(distinct c) as cnt
from table
group by a,b
;
select a,b,sum(cnt) as cnt
from (
select a,b,count(distinct c) as cnt
from table
group by a,b
) t1
group by a,b 就类似于这种,结果不一致,有哪位大佬碰到过吗
在DataWorks或MaxCompute(ODPS)中,当你尝试对子查询中的聚合结果进行二次聚合时,如果你直接使用sum(cnt)来累加count(distinct c)的结果,你会遇到一个问题:count(distinct c)在子查询中已经是针对每个(a, b)组合的唯一计数了,再次对这些计数进行sum并不会得到逻辑上正确的结果,除非你的业务逻辑确实要求这样的累加。
在你给出的例子中:
这里的外部group by a,b是多余的,因为你已经在子查询t1中按a,b进行了分组,并且计算了每个组的count(distinct c)。因此,外部查询中的sum(cnt)实际上是对每个(a, b)组合的单个cnt值进行了求和,由于每个(a, b)组合在子查询中只有一个cnt值,所以sum(cnt)就等于那个cnt值本身。
如果你的目的是想要得到每个(a, b)组合的count(distinct c)结果,那么你只需要子查询就足够了,不需要外部查询的group by和sum。
但是,如果你确实想要对某个更高级别的分组进行某种累加(比如按a分组并累加每个b的count(distinct c)),那么你需要一个不同的查询结构。例如:
在这个例子中,我们按a进行了外部分组,并累加了每个a值下所有b值的count(distinct c)结果。
总之,确保你的查询逻辑符合你的业务需求,并且不要在不必要的情况下对聚合结果进行二次聚合。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。