开发者社区 > 大数据与机器学习 > 大数据计算 MaxCompute > 正文

DataWorks中maxcompute分组count的结果 t1是什么原因?

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 就类似于这种,结果不一致,有哪位大佬碰到过吗

展开
收起
真的很搞笑 2024-05-13 11:54:28 49 0
1 条回答
写回答
取消 提交回答
  • 在DataWorks或MaxCompute(ODPS)中,当你尝试对子查询中的聚合结果进行二次聚合时,如果你直接使用sum(cnt)来累加count(distinct c)的结果,你会遇到一个问题:count(distinct c)在子查询中已经是针对每个(a, b)组合的唯一计数了,再次对这些计数进行sum并不会得到逻辑上正确的结果,除非你的业务逻辑确实要求这样的累加。

    在你给出的例子中:图片.png
    这里的外部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)),那么你需要一个不同的查询结构。例如:图片.png
    在这个例子中,我们按a进行了外部分组,并累加了每个a值下所有b值的count(distinct c)结果。

    总之,确保你的查询逻辑符合你的业务需求,并且不要在不必要的情况下对聚合结果进行二次聚合。

    2024-06-26 14:34:30
    赞同 展开评论 打赏

MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 相关电子书

    更多
    Data+AI时代大数据平台应该如何建设 立即下载
    大数据AI一体化的解读 立即下载
    极氪大数据 Serverless 应用实践 立即下载